[英]How to sleep() a thread in C++
我正在制作一个简单的程序,该程序创建一个线程,休眠20秒,然后终止该线程。 下面的代码可以编译,但无法进入睡眠状态并在运行时崩溃(在运行所有cout行之后)。 我不确定出什么问题了,我已尽力模拟与此主题有关的其他线程(ha)。 我应该使用其他方法吗? 使用Windows 10
#include "stdafx.h"
#include <iostream>
#include <thread>
#include <Windows.h>
using namespace std;
void t1(int x)
{
cout << "Child greeting!\n";
Sleep(20000);
cout << "Child terminating!\n";
std::terminate();
}
int main()
{
cout << "Parent greeting!\n";
thread first(t1,0);
cout << "Parent terminating!\n";
return 0;
}
问题不在于睡眠(您实际上应该使用std::this_thread::sleep_for()
),而是您的进程在线程结束之前结束。 当main()
函数返回时会发生这种情况。
这意味着线程对象将在无效状态下被破坏 ,从而导致std::terminate()
被调用,并且您的进程似乎崩溃了。
您可以通过等待线程结束来轻松解决此问题。 使用std::thread::join()
方法执行的操作。
另一方面,您自己在线程中调用std::terminate()
,因此,即使您等待线程结束,程序仍将“崩溃”。
如果希望线程结束,只需让t1()
函数退出常规方式即可。
将您的主要更改为:
int main()
{
cout << "Parent greeting!\n";
thread first(t1,0);
first.join(); // ADD THIS!!!
cout << "Parent terminating!\n";
return 0;
}
并从线程函数中删除终止调用。
void t1(int x)
{
cout << "Child greeting!\n";
Sleep(20000);
cout << "Child terminating!\n";
// REMOVE THIS!!! std::terminate();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.