#include <windows.h>
#include <iostream>
using namespace std;

DWORD WINAPI Fun1Proc(LPVOID param);
DWORD WINAPI Fun2Proc(LPVOID param);

int time = 0;
HANDLE Mutex;

void main()


{
HANDLE thread1,thread2;
thread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
thread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(thread1);
CloseHandle(thread2);
Mutex = CreateMutex(NULL,FALSE,NULL);
cout << "运行主线程!" << endl;
Sleep(4000);
}

DWORD WINAPI Fun1Proc(LPVOID param)


{

while(1)
{
WaitForSingleObject(Mutex,INFINITE);

if(time <= 20)
{
Sleep(1);
cout << "线程1运行第" << time++ << "次" << endl;
}
else
break;
ReleaseMutex(Mutex);
}
return 0;
}

DWORD WINAPI Fun2Proc(LPVOID param)


{

while(1)
{
WaitForSingleObject(Mutex,INFINITE);

if(time <= 20)
{
Sleep(1);
cout << "线程2运行第" << time++ << "次" << endl;
}
else
break;
ReleaseMutex(Mutex);
}
return 0;
}
首先插入上面的一段代码,说明下功能,就是使得每次每一个线程输出一个数据。通过信号量来使得线程之间不会发生冲突。
对于两个线程函数,注意原型都要一致,也就是DWORD WINAPI XXX(LPVOID );所以需要编写两个线程函数,也就是CreateThread函数来实现。
其次,就需要实现两个线程之间的协调,如何协调呢?
WaitForSingleObject,里面的参数设定了信号量的占用者,也就阻塞了其他的线程执行,待它执行完毕后,ReleaseMutex函数则释放了该信号量,实现了其他线程的运行。
总体上来说,这个程序比较简单。
但是,基本的函数和API,都是很基本的线程操作,需要注意。。。
posted on 2010-02-09 17:23
deercoder 阅读(2321)
评论(0) 编辑 收藏 引用