C++中線程的使用:線程的使用有多種方法,最常用的方法為CreateThread,CreateThrea的的參數詳解如下:
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTRIBUTES 的指針,為新線程指定安全描述
__in SIZE_T dwStackSize, // 初始化線程堆棧尺寸
__in LPTHREAD_START_ROUTINE lpStartAddress, //線程函數所指向的地址 起始函數
__in_opt LPVOID lpParameter, // 給線程函數傳遞的參數
__in DWORD dwCreationFlags, // 有關線程的標志
__out_opt LPDWORD lpThreadId //系統分配給線程的ID
);
----第一個參數是安全屬性,一般設為nil,使用缺省的安全屬性。當我們想此線程有另外的子進程時,可改變它的屬性。
----第二個參數是線程堆棧尺寸,一般設為0,表示與此應用的堆棧尺寸相同,即主線程與創建的線程一樣長度的堆棧。並且其長度會根據需要自動變長。
----第三個參數,也是最重要的一個,是一個指向函數名的指針,但傳遞時很簡單,只需在線程函數名前加上@就可以了。
----第四個參數是你需要向線程函數傳遞的參數,一般是一個指向結構的指針。不需傳遞參數時,則這個參數設為nil。
----第五個參數,傳入與線程有關的一些標志,如果是CREATE_SUSPENDED,則創建一個掛起的線程,即這個線程本身已創建,它的堆棧也已創建。但這個線程不會被分配給CPU時間,只有當ResumeThread函數被調用后才能執行;當然,也可以調用SuspendThread函數再次掛起線程。要是標志為0,那么一旦建立線程,線程函數就被立即調用。一般傳為0即可。
----第六個參數是系統分配給這個線程的唯一的ID標志
一般的,參數傳遞可以通過建立一個結構體,從而利用第四個參數,將所有要用到的參數傳遞給線程函數,代碼實例如下:
1、定義結構體
1 struct THreadTest 2 { 3 int a; 4 int b; 5 };
2、聲明線程執行函數
static DWORD WINAPI Thread1(LPVOID lpParameter);
以上兩步在頭文件中進行,接下來,編寫創建線程函數和完成線程函數體
3、聲明線程

1 THreadTest *mythreadTest=new THreadTest(); 2 mythreadTest->a=5;//給參數賦值 3 mythreadTest->b=6; 4 m_thread=CreateThread(NULL,0,Thread1,mythreadTest,0,NULL);//創建線程
4、編寫線程函數體,取出需要用到的參數進行計算
DWORD WINAPI CTestThreadDlg::Thread1(LPVOID lpParameter) { THreadTest* mythread=(THreadTest*)lpParameter;//獲取參數結構體 CString print; print.Format("%d",mythread->a); mythread->a; //m_btn.SetWindowText("test"); AfxMessageBox(print); return 0; }