std::thread

std::thread为C++11的线程类,使用方法和boost接口一样,非常方便。
C++11的std::thread解决了boost::thread中构成参数限制的问题。

#include <thread>         // std::thread, std::thread::id, std::this_thread::get_id  
#include <chrono>         // std::chrono::seconds

void threadfun1(){}
void threadfun2(int iParam, std::string sParam){}

std::thread t1(threadfun1);
std::thread t2(threadfun2, 10, "abc");

std::shared_ptr<std::thread> m_routine;

1 m_routine.reset( new std::thread( [&]()
2  {
3   while (true)
4   {
5    std::this_thread::sleep_for(std::chrono::minutes(1));
6   }
7  })
8 );
9 m_routine->detach();

list< shared_ptr<thread> > m_listThreads;     // 线程管理

 1 auto ptrServerThread1 = shared_ptr<thread>(new thread(&SoapMgr::SoapServerThread, this, Enum_Service, g_config.iFSUPort));
 2 m_listThreads.push_back(ptrServerThread1);
 3 static void SoapServerThread(LPVOID Param, short SCServiceIndex, short port);
 4 void SoapMgr::SoapServerThread(LPVOID Param, short SCServiceIndex, short port)
 5 {
 6  SoapMgr* pMgr = (SoapMgr*)Param;
 7     std::this_thread::sleep_for(std::chrono::seconds(5));
 8 }
 9 void SoapMgr::Exit()
10 {
11  m_bExit = true;
12  std::for_each(m_listThreads.begin(), m_listThreads.end(),[](shared_ptr<thread> ptr){ptr->join();});
13  m_listThreads.clear();
14 }

原文地址:https://www.cnblogs.com/osbreak/p/9208196.html

时间: 2024-11-03 21:09:50

std::thread的相关文章

C++——多线程编程(一)std::thread

(一)与C++11多线程相关的头文件 C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是< atomic> ,< thread>,< mutex>,< condition_variable>和< future>. ?< atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数. ?< thread>

std::thread(2)

个线程都有一个唯一的 ID 以识别不同的线程,std:thread 类有一个 get_id() 方法返回对应线程的唯一编号,你可以通过 std::this_thread 来访问当前线程实例,下面的例子演示如何使用这个 id: #include <thread> #include <iostream> #include <vector> void hello(){ std::cout << "Hello from thread " <

C++11多线程std::thread的简单使用

转自:http://blog.csdn.net/star530/article/details/24186783 在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上.但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有了一个更好用的用于线程操作的类std::thread.cocos2dx 3.0的版本默认是在vs2012版本,支持c++11的新特性,使用std::thread来创建线程简直方便. 下面

用std::thread替换实现boost::thread_group

thread_group是boost库中的线程池类,内部使用的是boost::thread. 随着C++ 11标准的制定和各大编译器的新版本的推出(其实主要是VS2012的推出啦……),本着能用标准库就用标准库的指导原则,决定把项目中多线程相关的部分代码从boost::thread迁移到std::thread. thread的迁移本身很简单,毕竟stl的很多功能是直接从boost发展而来的,基本上就是改一下头文件和名称空间的问题,例外是thread_group,thread_group是boos

C++11 并发指南------std::thread 详解

参考: https://github.com/forhappy/Cplusplus-Concurrency-In-Practice/blob/master/zh/chapter3-Thread/Introduction-to-Thread.md#stdthread-%E8%AF%A6%E8%A7%A3 本节将详细介绍 std::thread 的用法. std::thread 在 <thread> 头文件中声明,因此使用 std::thread 需包含 <thread> 头文件. &

Cocos2dx 3.0 过渡篇(二十七)C++11多线程std::thread的简单使用(下)

本篇接上篇继续讲:上篇传送门:http://blog.csdn.net/star530/article/details/24186783 简单的东西我都说的几乎相同了,想挖点深的差点把自己给填进去. 以下实际演练一下.请同意我參考偶尔E往事的一篇线程的博客, 他用的是pThread.这里我就用std::thread. 1.售票孙鑫老师的C++和Java多线程售票也一直让我念念不忘(好吧,我承认我没看过).这里用cocos2d-x3.0和C++11的std::thread实现一个吧.总共同拥有10

std::thread “terminate called without an active exception”

最近在使用std::thread的时候,遇到这样一个问题: std::thread t(func); 如果不使用调用t.join()就会遇到 "terminate called whithout an active exception",但是在使用boost:thread的时候却没遇到这个问题,google了一下,找到答案: The trouble you are encountering is a result of the stopThread going out of scope

mingw-w64线程模型:posix vs win32(posix允许使用c++11的std:: thread,但要带一个winpthreads,可能需要额外dll)

我正在安装 mingw-w64 on Windows,有两个选项: win32线程和posix线程. 我知道win32线程和pthreads之间的区别,但是我不明白这两个选项之间的区别. 我怀疑如果我选择了posix线程,它将阻止我调用像CreateThread这样的WinAPI函数. 似乎这个选项指定了哪个程序或者库将使用哪个线程 API,但通过什么? 由 GCC,libstdc++或者其他事物? 我发现:什么区别thread_posixs和 thread_win32 gcc Windows

C++11 std::thread在类的成员函数中的使用

#include <thread> #include <iostream> class Wrapper { public: void member1() { std::cout << "i am member1" << std::endl; } void member2(const char *arg1, unsigned arg2) { std::cout << "i am member2 and my first