随笔-145  评论-173  文章-70  trackbacks-0
#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 阅读(2302) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理