c++ - C++ 11中线程的延迟启动

标签 c++ multithreading c++11

我正在进入 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/

相关文章:

c++ - Visual Studio 2013 CTP 是否支持非整数类型的类内静态常量初始化程序?

c++ std::future 在单独的核心上运行每个函数

java - 开放线程过多错误

c++ - 有没有办法在 C++11 中取消/分离 future ?

Python 多线程

c# - 如何在完全相同的瞬间启动2个线程?

c++ - 传递 unique_ptr<T> 的 C++ vector 而不传递所有权

c++ - 类模板成员函数没有 "redefinition of default parameter error"?

c++ - 将指针传递给函数不返回值

c++ - 从并发关联容器中删除 (concurrent_unordered_map)