随笔-5  评论-1  文章-0  trackbacks-0
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)  编辑 收藏 引用 所属分类: 进程与线程

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