新线程导致问题 C++

问题描述

我有一个 void 函数,里面有一个 while (true) 循环,Sleep();std::this_thread::sleep_for(std::chrono::milliseconds()); 什么都不做。是的,我知道我的睡眠时间是 毫秒 而不是几秒,通过多线程,我的意思是我已经完成了:

std::thread nThread(Void);
nThread.detach();

当我只是调用该方法时,不会发生此问题,并且睡眠很好。

基本上我在做什么:

#include <stdio.h>
#include <thread>

void thisisVoid()
{
    while (true)
    {
        printf("Print");
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }
}

int main()
{
    std::thread nThread(thisisVoid); 
    nThread.detach();
}

解决方法

问题不是睡眠。你还没有真正提出问题,但我认为你的意思是如果你不分离,你就会崩溃。

这就是为什么...

C++ 不喜欢你用悬空的线程退出程序。您可以分离它们或加入它们。你的新线程有一个启动时间,如果你只是在底部退出 main,你的第一个线程可能还没有运行。而且还没有被允许清理,因为你没有加入它或分离它。

所以你必须在 main() 中做一个或另一个。如果你加入反对它,你会等到它完成。如果你把它拆开,你甚至可以在他被处决之前退出。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...