天天看點

CreateThread建立一個簡單的多線程

#include<windows.h>

#include<iostream.h>

DWORD WINAPI ThreadFunc(LPVOID param) //線程有個參數的,要加上

{

  MessageBox(NULL,"this is a test","Test",MB_OK);

  return 0;

}

int main()

{

  HANDLE hThread=NULL;

  DWORD ThreadNum=0;

  hThread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)ThreadFunc,0,NULL,&ThreadNum);  //ThreadFunc前加個強行轉換不會錯

  WaitForSingleObject(hThread, INFINITE); //這句不加上有可能線程還沒起來就結束了

  return 0; 

}

建立一個Win32 Console Application,工程名為CreateMythread

添加一個CPP檔案,代碼如下

#include <iostream>      
#include <windows.h>      
using namespace std;      
DWORD WINAPI ThreadProc(LPVOID pParam);      
UINT PrintHello(LPVOID lpParam);      
HANDLE g_Mutex;  //互斥量      
int main(int argc,char* argv[])      
{      
//建立互斥量      
g_Mutex=CreateMutex(NULL,false,"CreateMythread");      
DWORD ThreadID;      
char* cParam="Hello World!";      
int iParam=2010;      
//建立第一個線程ThreadProc      
CreateThread(NULL,0,ThreadProc,      
cParam,0,&ThreadID);      
//建立第二個線程PrintHello      
//若不是規範格式則必須用LPTHREAD_START_ROUTINE轉換      
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PrintHello,      
&iParam,0,&ThreadID);      
Sleep(100);      
CloseHandle(g_Mutex);      
//system("pause");      
return 0;      
}      
DWORD WINAPI ThreadProc(LPVOID pParam)      
{      
//等待被喚醒      
WaitForSingleObject(g_Mutex,INFINITE);      
cout <<"CreateThread:ThreadProc ";      
cout <<(char*)pParam <<endl;      
//Sleep(0);      
//将互斥量設定為有信号,此時第一個等待的線程被喚醒,并将該互斥量置為無信号狀态      
ReleaseMutex(g_Mutex);      
return 0;      
}      
UINT PrintHello(LPVOID lpParam)      
{      
WaitForSingleObject(g_Mutex,INFINITE);      
cout <<"CreateThread:PrintHello ";      
cout <<*((int*)lpParam) <<endl;      
//Sleep(0);      
ReleaseMutex(g_Mutex);      
return 0;      
}      

繼續閱讀