C++11 thread::detach(2)

原文地址:http://www.cplusplus.com/reference/thread/thread/detach/

public member function

<thread>

std::thread::detach

void detach();

Detach thread

Detaches the thread represented by the object from the calling thread, allowing them to execute independently from each other.

将本线程从调用线程中分离出来,允许本线程独立执行。(但是当主进程结束的时候,即便是detach()出去的子线程不管有没有完成都会被强制杀死)

例子:

#include <iostream>
#include <thread>
#include <vector>
#include <ctime>
#include <fstream>
using namespace std;
//delay(n) 延时n秒
void delay(double sec)
{
    time_t start_time, cur_time; // 变量声明
    time(&start_time);
    do {
        time(&cur_time);
        }while((cur_time - start_time) < sec );
};
void show(int n){
	ofstream fout("detach.txt");
	if(!fout.is_open())
		cout<<"open failed!"<<endl;
	while(n>0){
		fout<<"1currentThread is "<<pthread_self()<<",Now n is "<<n<<endl;
		delay(0.2);
		n--;
	}
	fout<<"ok"<<endl;
	fout.close();
}
int main()
{
	cout<<"main starts"<<endl;
	thread t(show,100);
	t.detach();
	delay(1);
	cout<<"main complete!"<<endl;
}

运行截图:

可以看出,当进程结束的时候,即便detach没有完成任务也会被强制杀死。

Both threads continue without blocking nor synchronizing in any way. Note that when either one ends execution, its resources are released.

两个线程不会堵塞也不会同步,注意他们任一一个结束的时候,所持有的资源将会被释放。

After a call to this function, the thread object becomes non-joinable and
can be destroyed safely.

调用该方法后,该线程对象变得不可连接以及可以安全地销毁。

例子:

Parameters

none

Return value

none

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>       // std::cout
#include <thread>         // std::thread, std::this_thread::sleep_for
#include <chrono>         // std::chrono::seconds

void pause_thread(int n)
{
  std::this_thread::sleep_for (std::chrono::seconds(n));
  std::cout << "pause of " << n << " seconds ended\n";
}

int main()
{
  std::cout << "Spawning and detaching 3 threads...\n";
  std::thread (pause_thread,1).detach();
  std::thread (pause_thread,2).detach();
  std::thread (pause_thread,3).detach();
  std::cout << "Done spawning threads.\n";

  std::cout << "(the main thread will now pause for 5 seconds)\n";
  // give the detached threads time to finish (but not guaranteed!):
  pause_thread(5);
  return 0;
}

Edit
& Run

Output (after 5 seconds):

Spawning and detaching 3 threads...
Done spawning threads.
(the main thread will now pause for 5 seconds)
pause of 1 seconds ended
pause of 2 seconds ended
pause of 3 seconds ended
pause of 5 seconds ended

Data races

The object is modified.

Exception safety

Basic guarantee: if an exception is thrown by this member function, the thread object is
left in a valid state.

If the call fails, a system_error exception is thrown:

exception type error condition description
system_error errc::invalid_argument The thread object is not joinable
system_error errc::no_such_process The thread object is not valid

—————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:[email protected]

2014-9-3

于GDUT

——————————————————————————————————————————————————————————————————

时间: 2024-10-17 02:16:30

C++11 thread::detach(2)的相关文章

再探c++11 Thread库之原子操作

我在之前一篇博文<初探c++11 Thread库之使写多线程程序>中,着重介绍了<thread>头文件中的std::thread类以及其上的一些基本操作,至此我们动手写多线程程序已经基本没有问题了.但是,单线程的那些"坑"我们仍还不知道怎么去避免. 多线程存在的问题 多线程最主要的问题就是共享数据带来的问题.如果共享数据都是只读的,那么没问题,因为只读操作不会影响到数据,更不会涉及对数据的修改,所以所有线程都会获得同样的数据.但是,当一个或多个线程要修改共享数据

初探C++11 Thread

Thread 开启一个线程 使用c++11开启一个线程是比较简单的,如下: #include<iostream> #include<thread> using namespace std; void hello() { cout<<"hello kitty"<<endl; } int main() { std::thread t(hello); t.join(); return 0; } 输出结果: 也可以通过函数对象的方式 #inclu

C++11 Thread多线程的学习心得与问题

C++11 ,封装了thread的多线程的类,这样对多线程的使用更加方便. 多线程的原理我不加赘述,可以参看操作系统等参考书. 多线程代码可以最大化利用计算机性能资源,提高代码的运行效率,是常用优化方法. 我不是C++大神,初学阶段的菜鸟而已,很多问题我还是不理解当中的原理,写这篇博客的原因,也是记录自己的学习心得和思路,供自己日后自己思考. 首先从简单的问题入手,如何写一个多线程的C++代码? #include<iostream> #include<thread> void fu

C++11 thread::joinable(5)

原文地址:http://www.cplusplus.com/reference/thread/thread/joinable/ public member function <thread> std::thread::joinable bool joinable() const noexcept; Check if joinable Returns whether the thread object is joinable. 返回线程对象是否是joinable的. A thread objec

c++11 Thread库初探

c++11中最重要的特性之一就是对多线程的支持了,然而<c++ primer>5th却没有这部分内容的介绍,着实人有点遗憾.在网上了解到了一些关于thread库的内容.这是几个比较不错的学习thread库的资源: Thread support library                    : http://en.cppreference.com/w/cpp/thread Cpp reference/thread                      : http://www.cpl

并发编程: c++11 thread(Func, Args...)利用类成员函数创建线程

c++11是VS2012后支持的新标准,为并发编程提供了方便的std::thread. 使用示例: #include <thread> void thread_func(int arg1, int arg2, float* arg3){ arg3 = (arg1*1.0)/(arg1 + arg2); cout << "arg1 / (arg1 + arg2) = " << arg3 << endl; return; } void mai

C++11 thread(1)

原文地址:http://www.cplusplus.com/reference/thread/thread/thread/ public member function <thread> std::thread::thread default (1) thread() noexcept; initialization (2) template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&

C++11 thread

1 //这里使用c++的thread创建了5个线程,并支持传递多个参数 2 void thread1(int aa,int bb) 3 { 4 cout << aa << bb << endl; 5 } 6 7 void testthread() 8 { 9 int ithreads[] = {1,2,3,4,5}; 10 for(auto i: ithreads) 11 { 12 thread t1(thread1,i,i+1); 13 t1.join(); 14 }

c++11: &lt;thread&gt;学习

<thread>头文件中包含thread类与this_thread命名空间,下面逐一介绍. thread类 1. 构造函数 (1)默认构造函数 thread() noexcept; 默认构造函数不执行任何线程,产生线程对象的线程ID为0. (2)初始化构造函数 template <class Fn, class... Args> explicit thread (Fn&& fn, Args&&... args); 产生一个thread对象,提供一个j