我們在進行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