我們在進行win32控制台程式調試的時候也經常會用到多線程,
這裡簡單的用一個例子來給初學者說明多線程程式設計,由此開啟
多線程的程式設計學習,僅抛磚引玉而已,在程式設計的過程中深入。
1、建立win32控制台工程
2、建立c++檔案并添加到工程
3、包含頭檔案
#include <windows.h>
#include <stdio.h>
4、設定工程
Project -> Settings -> C/C++ -> Category ->
Code Generation -> User run-time library ->
Debug Multithreaded
5、實作多線程函數
DWORD WINAPI ThreadProc1(LPVOID lpParam){
printf(“線程開始\n”);
while(1){
//doing someting
}
printf(“線程結束\n”);
return 0;
}
6、實作main函數
void main(){
HANDLE thread_handle;
DWORD thread_ID;
thread_handle = CreateThread( //建立線程
NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadProc1,
NULL,
0,
& thread_ID
);
if(!thread_handle)
printf("線程建立失敗\n");
WaitForSingleObject(thread_handle,INFINITE); //等待線程執行完成
CloseHandle(thread_handle); //關閉線程
}
7、線程參數傳遞
如果線程函數需要使用參數,可以使用全部變量,線上程函數中通路全局變量,
這樣最好将全局變量聲明為static;也可以在建立線程的時候将參數作為結構傳給
CreateThread函數的第4個參數,然後線上程函數中解析出需要的變量。
定義參數結構體:
Struct FuncPars{
int id;
char *name;
};
定義參數結構體變量:
FuncPars pars;
pars.id = 0x01;
pars.name = ”thread1”;
傳遞參數結構體指針:
thread_handle = CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadProc1,
&pars,
0,
&thread_ID
);
線程函數中解析參數:
DWORD WINAPI ThreadProc1(LPVOID lpParam){
int id;
char *name;
id = (FuncPars *)lpParam->id;
name = (FuncPars *)lpParam->name;
printf(“線程開始\n”);
while(1){
//doing someting
}
printf(“線程結束\n”);
return 0;
}
相關函數原型以及參數定義請參考MSDN