#include <thread>
#include <chrono>
using namespace std:
void f()
{
// Sleeping for a very long while
while (SOCKET s = accept(listening_socket, ...))
{
// ...
}
}
int main()
{
std::thread t(f);
DoSomething();
t.???(); /* What to place here to wake/terminate thread f? */
}
在 Win32 下,我可以使用 TerminateThread()
来终止线程。但我想要的是一种跨平台的方法来做到这一点。
我应该如何在 C++ 中优雅地做到这一点?
最佳答案
我建议在广播信号、信号量、条件变量或其他东西上休眠,而不是进行阻塞休眠。然后您的应用程序只需设置信号,任何正在 sleep 的人都会醒来并可以退出。这是一个更简洁的解决方案,因为它让线程主体有机会清理它可能正在做的任何事情——包括释放锁!
响应更新
在这种特定情况下,在调用 accept
之前调用带有超时的 select
。
关于c++ - 如何优雅地唤醒或终止 sleep 中的 std::thread?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14887067/