我正在进入 C++11 线程并遇到了问题。
我想将一个线程变量声明为全局变量并稍后启动它。
但是,我看到的所有示例似乎都立即启动了线程
thread t(doSomething);
我想要的是
thread t;
稍后再启动线程。
我试过的是
if(!isThreadRunning)
{
thread t(readTable);
}
但现在 t 是 block 作用域。所以我想声明 t,然后再启动线程,以便其他函数可以访问 t。
感谢您的帮助。
最佳答案
std::thread
的默认构造函数实例化 std::thread
而不启动或表示任何实际线程。
std::thread t;
赋值操作符移动线程对象的状态,并将分配的线程对象设置为其默认初始化状态:
t = std::thread(/* new thread code goes here */);
这首先构造一个表示新线程的临时线程对象,将新线程表示转移到具有默认状态的现有线程对象中,并将临时线程对象的状态设置为不表示任何正在运行的线程的默认状态。然后临时线程对象被销毁,什么都不做。
这是一个例子:
#include <iostream>
#include <thread>
void thread_func(const int i) {
std::cout << "hello from thread: " << i << std::endl;
}
int main() {
std::thread t;
std::cout << "t exists" << std::endl;
t = std::thread{ thread_func, 7 };
t.join();
std::cout << "done!" << std::endl;
}
关于c++ - C++ 11中线程的延迟启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524775/