最近对Windows Platform SDK和MFC编程比较感兴趣,工作之余(我是搞.NET的C/S编程),写了写小程序消遣。o(∩_∩)o... 首先是关于线程同步的:
#include <windows.h>
#include <iostream.h>
//线程方法
DWORD WINAPI Run1(LPVOID lpParam);
DWORD WINAPI Run2(LPVOID lpParam);
HANDLE hMutex;
int count;
void main()
{
//创建互斥体,或者我们学OS时叫信号量
hMutex = CreateMutex(NULL,false,"ThreadSync");
//如果程序已经运行,则退出
if(hMutex&&ERROR_ALREADY_EXISTS==GetLastError())
{
cout<<"Instance has already run."<<endl;
return;
}
count = 100;
HANDLE hThread1 = CreateThread(NULL,0,Run1,NULL,0,NULL);
CloseHandle(hThread1);
HANDLE hThread2 = CreateThread(NULL,0,Run2,NULL,0,NULL);
CloseHandle(hThread2);
Sleep(5000);
}
DWORD WINAPI Run1(LPVOID lpParam)
{
while(true)
{
//获得Mutex
WaitForSingleObject(hMutex,INFINITE);
if(count>0)
{
Sleep(1);
cout<<"Thread 1 No."<<count<<endl;
count--;
//释放Mutex
ReleaseMutex(hMutex);
}
else
{
ReleaseMutex(hMutex);
break;
}
}
return 0;
}
DWORD WINAPI Run2(LPVOID lpParam)
{
while(true)
{
WaitForSingleObject(hMutex,INFINITE);
if(count>0)
{
Sleep(1);
cout<<"Thread 2 No."<<count<<endl;
count--;
ReleaseMutex(hMutex);
}
else
{
ReleaseMutex(hMutex);
break;
}
}
return 0;
}