#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;
}