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

你可能感兴趣的:(多线程,null,application,2010,winapi)