青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

C++多線程(八)

多線程同步之Event(主要用來線程間的等待通知
 
一 Event
     在所有的內(nèi)核對象中,事件內(nèi)核對象是個最基本的對象。它們包含一個使用計數(shù)(與所有內(nèi)核對象一樣),一個用于指明該事件是個自動重置的事件還是一個人工重置的事件的布爾值,另一個用于指明該事件處于已通知狀態(tài)還是未通知狀態(tài)的布爾值。

        事件能夠通知一個操作已經(jīng)完成。有兩種不同類型的事件對象。一種是人工重置的事件,另一種是自動重置的事件。當人工重置的事件得到通知時,等待該事件的所有線程均變?yōu)榭烧{(diào)度線程。當一個自動重置的事件得到通知時,等待該事件的線程中只有一個線程變?yōu)榭烧{(diào)度線程。

        當一個線程執(zhí)行初始化操作,然后通知另一個線程執(zhí)行剩余的操作時,事件使用得最多。事件初始化為未通知狀態(tài),然后,當該線程完成它的初始化操作后,它就將事件設置為已通知狀態(tài)。這時,一直在等待該事件的另一個線程發(fā)現(xiàn)該事件已經(jīng)得到通知,因此它就變成可調(diào)度線程。

         Microsoft為自動重置的事件定義了應該成功等待的副作用規(guī)則,即當線程成功地等待到該對象時,自動重置的事件就會自動重置到未通知狀態(tài)。這就是自動重置的事件如何獲得它們的名字的方法。通常沒有必要為自動重置的事件調(diào)用ResetEvent函數(shù),因為系統(tǒng)會自動對事件進行重置。但是,Microsoft沒有為人工重置的事件定義成功等待的副作用,所以需要調(diào)用ResetEvent()。

二 Event API

Event function Description
CreateEvent Creates or opens a named or unnamed event object.
CreateEventEx Creates or opens a named or unnamed event object and returns a handle to the object.
OpenEvent Opens an existing named event object.
PulseEvent Sets the specified event object to the signaled state and then resets it to the nonsignaled state after releasing the appropriate number of waiting threads.
ResetEvent Sets the specified event object to the nonsignaled state.
SetEvent Sets the specified event object to the signaled state.


三 代碼實例

1)使用手動的Event:當文件讀入內(nèi)存的時候,WordCount, SpellCheck,GrammarCheck可以同時進行,這里使用Event,當文件一讀入內(nèi)存就通知WordCount,SpellCheck和GrammarCheck線程開始執(zhí)行。
#include <windows.h>
#include 
<process.h>
#include 
<stdio.h>

// a global handle to event.
HANDLE g_hEvent;

void OpenFileAndReadContentsIntoMemory();
unsigned __stdcall WordCount(
void *pvParam);
unsigned __stdcall SpellCheck(
void *pvParam);
unsigned __stdcall GrammarCheck(
void *pvParam);

int main() 
{
   
//Create the manual-reset, nonsignaled event.
   g_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

   
//Spawn 3 new threads.
   HANDLE hThread[3];
   unsigned dwThreadID[
3];
   hThread[
0= (HANDLE)_beginthreadex(NULL, 0, WordCount, NULL, 0&dwThreadID[0]);
   hThread[
1= (HANDLE)_beginthreadex(NULL, 0, SpellCheck, NULL, 0&dwThreadID[1]);
   hThread[
2= (HANDLE)_beginthreadex(NULL, 0, GrammarCheck, NULL, 0&dwThreadID[2]);

   OpenFileAndReadContentsIntoMemory();

   
//Allow all 3 threads to access the memory.
   SetEvent(g_hEvent); 

   printf(
"main thread exit\n");
   
return 1;
}

void OpenFileAndReadContentsIntoMemory()
{
  printf(
"Open File and Read contents into memory\n");
}

unsigned __stdcall WordCount(
void *pvParam) 
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("0:word count\n");
   
return(0);
}

unsigned __stdcall SpellCheck(
void *pvParam)
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("1:Spell check\n");
   
return(0);
}

unsigned __stdcall GrammarCheck(
void *pvParam)
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("2:Grammar check\n");
   
return(0);
}

2)修改上面的代碼,使用自動Event,則必須在3個子線程中增加SetEvent()。且要想讓3個線程都執(zhí)行完,必須的增加Waitfor()函數(shù)。

#include <windows.h>
#include 
<process.h>
#include 
<stdio.h>

// a global handle to event.
HANDLE g_hEvent;

void OpenFileAndReadContentsIntoMemory();
unsigned __stdcall WordCount(
void *pvParam);
unsigned __stdcall SpellCheck(
void *pvParam);
unsigned __stdcall GrammarCheck(
void *pvParam);

int main() 
{
   
//Create the AUTO-reset, nonsignaled event.
   g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

   
//Spawn 3 new threads.
   HANDLE hThread[3];
   unsigned dwThreadID[
3];
   hThread[
0= (HANDLE)_beginthreadex(NULL, 0, WordCount, NULL, 0&dwThreadID[0]);
   hThread[
1= (HANDLE)_beginthreadex(NULL, 0, SpellCheck, NULL, 0&dwThreadID[1]);
   hThread[
2= (HANDLE)_beginthreadex(NULL, 0, GrammarCheck, NULL, 0&dwThreadID[2]);

   OpenFileAndReadContentsIntoMemory();

   
//Allow all 3 threads to access the memory.
   SetEvent(g_hEvent); 

    
//wait for child threads to exit
    DWORD dwCThd = WaitForMultipleObjects (3//count of objects
                                        hThread, //thread handle
                                        TRUE, //wait for all
                                        INFINITE); //time out interval
    if(dwCThd != WAIT_OBJECT_0)
    
{
        printf(
"error\n");
        exit(
-1);
    }


    
//close handles
    CloseHandle (g_hEvent);
    
//close child thread handles
    for (int i=0; i<3; i++)
        CloseHandle (hThread[i]);

   printf(
"main thread exit\n");
   
return 1;
}

void OpenFileAndReadContentsIntoMemory()
{
  printf(
"Open File and Read contents into memory\n");
}

unsigned __stdcall WordCount(
void *pvParam) 
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("0:word count\n");
   SetEvent(g_hEvent);

   
return(0);
}

unsigned __stdcall SpellCheck(
void *pvParam)
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("1:Spell check\n");
   SetEvent(g_hEvent);

   
return(0);
}

unsigned __stdcall GrammarCheck(
void *pvParam)
{
   
//Wait until the file's data is in memory.
   WaitForSingleObject(g_hEvent, INFINITE);

   
//Access the memory block.
   printf("2:Grammar check\n");

   SetEvent(g_hEvent);

   
return(0);
}

四 參考
windows核心編程

posted on 2007-07-31 14:59 夢在天涯 閱讀(4511) 評論(5)  編輯 收藏 引用 所屬分類: CPlusPlus

評論

# re: C++多線程(八)[未登錄] 2007-08-01 08:34 漂舟

這一系列標題寫得有誤解, 看著總有上當?shù)母杏X,
應該叫 Windows多線程 吧。  回復  更多評論   

# re: C++多線程(八) 2007-08-01 09:00 夢在天涯

應該是C++多線程在windows上的實現(xiàn)。  回復  更多評論   

# re: C++多線程(八)[未登錄] 2007-08-01 21:39 創(chuàng)系

建議LZ把題目改為"windows 多線程"。  回復  更多評論   

# re: C++多線程(八) 2007-10-26 11:11 zhang-gq

不錯。謝謝。  回復  更多評論   

# re: C++多線程(八) 2009-06-10 14:47 aniki

學習中,以前用過.net封裝后的event,看到這塊似曾相識啊  回復  更多評論   

公告

EMail:itech001#126.com

導航

統(tǒng)計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1811731
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美国产精品中文字幕| 亚洲天天影视| 久久亚洲捆绑美女| 久久国产天堂福利天堂| 国产精品影视天天线| 亚洲欧美日韩天堂一区二区| 一本一本a久久| 国产精品久久久久aaaa樱花| 亚洲欧美一区二区三区极速播放| 日韩午夜免费| 国产精品久久福利| 久久久在线视频| 蜜臀91精品一区二区三区| 亚洲国语精品自产拍在线观看| 欧美国产第一页| 韩日欧美一区二区| 久久一区二区精品| 欧美四级电影网站| 在线亚洲免费| 亚洲在线第一页| 伊人久久大香线蕉av超碰演员| 欧美凹凸一区二区三区视频| 欧美黄网免费在线观看| 99re这里只有精品6| 在线午夜精品| 国产亚洲精品v| 母乳一区在线观看| 欧美涩涩网站| 久久综合色8888| 久久久久久久久久久久久9999| 国产精品一级在线| 欧美激情第三页| 国产精品毛片一区二区三区| 久久综合国产精品台湾中文娱乐网| 久久久久久久综合日本| 一区二区三区精品在线| 久久精品国产99国产精品澳门| 日韩亚洲欧美一区| 欧美中文字幕| 亚洲欧美bt| 一本不卡影院| 最新中文字幕亚洲| 欧美在线播放一区二区| 亚洲午夜精品福利| 两个人的视频www国产精品| 亚洲视频综合在线| 老司机免费视频一区二区| 欧美一区二区三区成人| 欧美日韩国产一级片| 久久久精品999| 欧美日韩美女在线观看| 快播亚洲色图| 国产美女扒开尿口久久久| 亚洲精品在线观看视频| 在线免费观看成人网| 中文精品99久久国产香蕉| 亚洲韩国青草视频| 免费看的黄色欧美网站| 狼狼综合久久久久综合网| 国产精品美女主播| 一区二区三区.www| 亚洲深爱激情| 欧美久久久久久久久| 欧美国产精品人人做人人爱| 一色屋精品视频免费看| 久久精品国产一区二区三区| 欧美一区二区成人| 国产精品网站一区| 欧美一级成年大片在线观看| 欧美一级久久| 国产日本欧美在线观看| 亚洲欧美久久久| 欧美在线观看视频一区二区三区| 国产精品美女久久久免费| 亚洲一区在线观看免费观看电影高清| 一区二区三区视频在线| 欧美日韩精品中文字幕| 亚洲精品偷拍| 亚洲综合首页| 国产精品一区免费观看| 亚洲男人第一网站| 久久久久久久久综合| 激情久久影院| 欧美二区在线| 日韩写真视频在线观看| 亚洲主播在线观看| 国产一区二区三区观看| 久久这里有精品15一区二区三区| 欧美成人xxx| 日韩亚洲视频| 国产精品国产a级| 久久爱91午夜羞羞| 欧美韩日一区| 亚洲深夜福利在线| 国产欧美日韩亚洲一区二区三区| 欧美在线中文字幕| 最近看过的日韩成人| 日韩亚洲国产欧美| 国产亚洲午夜高清国产拍精品| 久久乐国产精品| 91久久在线| 久久精品国产69国产精品亚洲| 精品电影在线观看| 欧美人与性禽动交情品 | 国产精品一区久久| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲国产精品久久91精品| 久久亚洲捆绑美女| 欧美日韩精品一区视频| 猫咪成人在线观看| 亚洲一区亚洲| 在线日韩视频| 国产精品嫩草久久久久| 亚洲精品中文字幕有码专区| 国产精品影片在线观看| 欧美粗暴jizz性欧美20| 午夜视频精品| 亚洲狼人精品一区二区三区| 久久亚洲美女| 欧美一区二区在线免费播放| 亚洲精品久久久蜜桃| 国产日韩在线视频| 国产精品福利在线| 欧美激情偷拍| 久久久精彩视频| 亚洲综合不卡| 99视频一区二区三区| 欧美韩日视频| 免播放器亚洲| 久久精品国产久精国产一老狼| 中文在线资源观看视频网站免费不卡| 国产乱码精品一区二区三区忘忧草 | 日韩午夜精品| 一区免费观看| 国产亚洲一区二区精品| 国产精品a久久久久久| 欧美国产视频一区二区| 麻豆精品精华液| 久久久精品一区| 欧美一二三视频| 欧美亚洲一级片| 亚洲欧美国产高清| 亚洲无线视频| 在线性视频日韩欧美| 亚洲精品在线三区| 亚洲精品色图| 亚洲精品国产精品国自产观看浪潮| 老司机aⅴ在线精品导航| 久久青青草综合| 久久夜色精品国产噜噜av| 久久精品国亚洲| 久久久一本精品99久久精品66| 久久国产精品久久国产精品| 欧美专区日韩视频| 久久精品日韩| 久久亚洲综合色| 美国三级日本三级久久99| 久久综合一区| 亚洲国产欧美一区| 亚洲精品偷拍| 亚洲欧美国产精品va在线观看| 欧美一区免费视频| 久久久久久一区| 欧美wwwwww| 欧美日韩中文字幕在线| 国产精品日日做人人爱| 国产亚洲一区二区三区在线播放| 国产综合一区二区| 亚洲国产天堂网精品网站| 中文日韩在线视频| 午夜精品久久久久影视| 久久久一区二区三区| 亚洲福利专区| 亚洲视频精选在线| 久久九九国产精品怡红院| 欧美电影电视剧在线观看| 欧美午夜精品伦理| 在线电影院国产精品| 亚洲作爱视频| 欧美一区二区三区四区视频| 免费成人性网站| 一本久道久久综合狠狠爱| 欧美一区久久| 欧美四级在线| 在线观看国产成人av片| 亚洲一区bb| 欧美国产激情二区三区| 亚洲一区二区高清视频| 久久综合999| 国产精品久久久久av| 亚洲第一精品影视| 亚洲欧洲99久久| 欧美电影免费观看高清| 亚洲午夜高清视频| 免费成人高清视频| 国产日韩欧美一二三区| 亚洲三级视频| 久久久久九九视频| 这里只有视频精品|