如何正常唤醒或终止睡眠的std :: thread?

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++中优雅地做到这一点?

D.S*_*ley 8

我建议睡在广播信号,信号量,条件变量或其他东西上而不是阻塞睡眠.然后你的应用程序只是设置信号,任何正在睡觉的人都会醒来并退出.这是一个更清洁的解决方案,因为它给线程主体一个机会来清理它可能正在做的任何事情 - 包括释放锁!

对更新的响应
在此特定情况下,在呼叫select之前使用超时呼叫accept.