我希望在一个单独的线程中运行一个类方法:
std::thread myThread(&Class::method, this);
myThread.join();
//Other events
执行此操作时,其他事件仅在Class:方法结束时发生,而不是同时发生。
我忘了什么?
答案 0 :(得分:1)
您正在线程上调用.join
(),该线程将阻塞直到该线程完成,与该线程同时运行并在您要同时运行的所有其他内容之后调用join()
,或者在线程对象上调用detach()
例如
auto th = std::thread{[]() { ... }};
do_something();
th.join();
此示例中do_something()
将与线程th
同时运行,或者您可以调用detach()
std::thread{[]() { ... }}.detach();
do_something();
答案 1 :(得分:0)
这就是:
启动一个主题并让它运行& Class :: method
std::thread myThread(&Class::method, this);
等到线程结束。
myThread.join();
在当前线程中做其他事情
//Other events
如您所见,您的myThread.join()
暂停了当前的帖子。
请改为:
std::thread myThread(&Class::method, this);
//Other events
myThread.join();
可替换地;请勿执行此加入并转而致电myThread.detach();。