1.用事件对象来控制线程
//Define thread function
DWORD __stdcall ThreadFunOne(LPVOID lParam)
{
for(;;)
{
WaitForSingleObject(hEvent, INFINITE); //阻塞线程,直到事件对象为通知状态
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
Sleep(1000);
printf("ThreadOne print out: %i \n",WorkerID);
}
SetEvent(hEvent); //设置事件为通知状态
}
return 0;
}
DWORD __stdcall ThreadFunTwo(LPVOID lParam)
{
for(;;)
{
WaitForSingleObject(hEvent, INFINITE);
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
printf("ThreadTwo print out: %i \n",WorkerID);
Sleep(1000);
}
SetEvent(hEvent);
}
return 0;
}
void main()
{
//Define thread handle
HANDLE hThread1,hThread2;
hEvent = CreateEvent(NULL, FALSE, TRUE, "Event");
//Create thread
hThread1 = ::CreateThread(NULL,0,ThreadFunOne,NULL,0,NULL);
hThread2 = ::CreateThread(NULL,0,ThreadFunTwo,NULL,0,NULL);
//Close thread handle
CloseHandle(hThread1);
CloseHandle(hThread2);
//Note: Prevent process exiting
while (true)
{
;
}
}
2.用临界区来控制线程
DWORD __stdcall ThreadFunOne(LPVOID lParam)
{
for(;;)
{
EnterCriticalSection(&Section);
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
Sleep(1000);
printf("ThreadOne print out: %i \n",WorkerID);
}
LeaveCriticalSection(&Section);
}
return 0;
}
DWORD __stdcall ThreadFunTwo(LPVOID lParam)
{
for(;;)
{
EnterCriticalSection(&Section);
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
printf("ThreadTwo print out: %i \n",WorkerID);
Sleep(1000);
}
LeaveCriticalSection(&Section);
}
return 0;
}
void main()
{
//Define thread handle
HANDLE hThread1,hThread2;
InitializeCriticalSection(&Section);
//Create thread
hThread1 = ::CreateThread(NULL,0,ThreadFunOne,NULL,0,NULL);
hThread2 = ::CreateThread(NULL,0,ThreadFunTwo,NULL,0,NULL);
//Close thread handle
CloseHandle(hThread1);
CloseHandle(hThread2);
//Note: Prevent process exiting
while (true)
{
;
}
}
3.用互斥来控制线程
DWORD __stdcall ThreadFunOne(LPVOID lParam)
{
for(;;)
{
WaitForSingleObject(hMutex, INFINITE);
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
Sleep(1000);
printf("ThreadOne print out: %i \n",WorkerID);
}
ReleaseMutex(hMutex);
}
return 0;
}
DWORD __stdcall ThreadFunTwo(LPVOID lParam)
{
for(;;)
{
WaitForSingleObject(hMutex, INFINITE);
if (WorkerID<MAXWORKERID)
{
WorkerID +=1;
printf("ThreadTwo print out: %i \n",WorkerID);
Sleep(1000);
}
ReleaseMutex(hMutex);
}
return 0;
}
void main()
{
//Define thread handle
HANDLE hThread1,hThread2;
hMutex = CreateMutex(NULL, FALSE, "mutex");
//Create thread
hThread1 = ::CreateThread(NULL,0,ThreadFunOne,NULL,0,NULL);
hThread2 = ::CreateThread(NULL,0,ThreadFunTwo,NULL,0,NULL);
//Close thread handle
CloseHandle(hThread1);
CloseHandle(hThread2);
//Note: Prevent process exiting
while (true)
{
;
}
}
posted on 2009-07-25 22:48
yunboy 阅读(259)
评论(0) 编辑 收藏 引用 所属分类:
进程与线程