问题描述
我有一个 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() 中做一个或另一个。如果你加入反对它,你会等到它完成。如果你把它拆开,你甚至可以在他被处决之前退出。