xml*_*lmx 1 c++ multithreading portability cross-platform c++11
#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? */
}
Run Code Online (Sandbox Code Playgroud)
在Win32下,我可以TerminateThread()用来杀死一个线程.但我想要的是一个跨平台的方法来做到这一点.
我应该如何在C++中优雅地做到这一点?
我建议睡在广播信号,信号量,条件变量或其他东西上而不是阻塞睡眠.然后你的应用程序只是设置信号,任何正在睡觉的人都会醒来并退出.这是一个更清洁的解决方案,因为它给线程主体一个机会来清理它可能正在做的任何事情 - 包括释放锁!
对更新的响应
在此特定情况下,在呼叫select之前使用超时呼叫accept.