002使用類創建一個線程

#include <iostream>
#include <string>
#include <thread>

using namespace std;
class testClass
{
public:
	int &m_i;
	//構造函數
	testClass(int&i) :m_i(i)
	{
		cout << "類testClass的構造函數被執行" << endl;
	}

	//拷貝構造函數
	testClass(const testClass&ts):m_i(ts.m_i)
	{

		cout << "拷貝構造函數被執行" << endl;
	}

	~testClass()
	{
		cout << "析構函數被執行" << endl;
	}

	void operator()()//重載()運算符,變成一個可調用對象
	{
		cout << "我的線程opertator開始執行了\n" << endl;
		cout << "m_i1=" << m_i << endl;
		cout << "m_i2=" << m_i << endl;
		cout << "m_i3=" << m_i << endl;
		cout << "m_i4=" << m_i << endl;
		cout << "我的線程opertator結束執行了\n" << endl;

	}
};

int main(void)
{

	//使用類創建線程
	int myi = 6;
	testClass mytestclass(myi);
	thread myThread(mytestclass);//使用類對象創建一個線程

	//myThread.join();
	myThread.detach();
	cout << "這是主線程的執行\n" << endl;

	system("pause");
	return 0;
}
/*
 * 子線程打印輸出主線程的一個int類型的空間,當主線程執行完畢,子線程繼續訪問主線程的
 * 內存空間,就會出錯。所以這裏不能使用引用。
 * 問題:當主線程執行完畢,那麼主線程中的定義的類對象還能使用嗎?主線程中的對象沒有被銷燬嗎??
 *	原因是:對象已經不存在了,但是複製了一個新對象mytestclass到子線程中。主線程中的對象不存在了。
 *	但是複製的對象依舊存在。只要類裏面沒有引用,指針等就不會有問題。會調用拷貝構造函數。但是使用detach()
 *	構造和析構不能控制,使用join()可以控制。
 *	
 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章