VC訊號量和執行緒的用法
2009年09月04日 下午 08:23
先舉個例: UINT BoxA(LPVOID pParam) } } ...... void CMyDlg::OnStart() CWinThread *pWriteB=AfxBeginThread(BoxB, this,, THREAD_PRIORITY_NORMAL,
0, CREATE_SUSPENDED); CWinThread *pWriteC=AfxBeginThread(BoxC, this,, THREAD_PRIORITY_NORMAL,
0, CREATE_SUSPENDED); 最大值之間可以增加或減小),2為訊號量的最大值(也就是最大執行緒訪問數目),比如此處設為2,表示此訊號量最多隻允許倆個執行緒同時擁有它,其它執行緒想要獲得此訊號量的 話只能等待這兩個執行緒釋放此訊號量,或呼叫ReleaseSemaphore(semaphore.m_hObject,1,NULL)函式來增加訊號量的值。WaitForSingleObject(semaphore.m_hObject,INFINITE)函 數呼叫後訊號量的值自動減1,當減到0時,其它執行緒就不能再利用此訊號量了。ReleaseSemaphore(semaphore.m_hObject,1,NULL)函式使訊號量的值加1,當加到最大值時,訊號量 的值不再增大,此函式成功時返回1,呼叫失敗時返回0,當訊號量計數器已達到最大值時再呼叫此函式就會呼叫失敗,或者此函式的第三個引數+此時訊號量的值>最大值時也會調 用失敗,呼叫失敗的意思是忽略此函式,程式繼續執行。 關於將類的成員函式作為執行緒: 檔案1 UINT CVideoNetDlg::Thread_OpenViewDlg(LPVOID param) void CVideoNetDlg::OnView() 檔案2 此段程式的目的是在處理函式OnView()時,獲得訊號量semaphore後再呼叫CviewDlg類的模式對話方塊(其實是這樣的,點選某個菜 單彈出對話方塊,但是這個對話方塊初始化時必須要利用陣列CViewDlg::clientdata的資料,而這個陣列是在點選這個選單時傳送某程式碼到遠端 機,再從遠端機返回的資料得到賦值的。) 另外,此執行緒Thread_OpenViewDlg(LPVOID param)為類CVideoNetDlg的靜態成員函式,但是很顯然它使用了類CVideoNetDlg的非靜態公有成員viewdlg,這就是利用 this指標在***.OnView()函式中將CVideoNetDlg的物件***傳遞給了param引數,在通過 (CVideoNetDlg*)param將LPVOID型別轉換為CVideoNetDlg,執行CVideoNetDlg *dlg後dlg已經成了CVideoNetDlg的物件並獲得了***的指標,這樣就可以呼叫其成員viewdlg了。 最後,為什麼將訊號量和執行緒放在一起來分析,其實訊號量就是執行緒程式設計,自己“做”一個訊號量也是很簡單的事情:分配一個額外的執行緒,在這個執行緒中用 while迴圈來檢測你自定義的訊號量的變化,由於while在單獨的執行緒中執行,它不會影響主執行緒執行的。vc專門用這種機制只不過是來簡化程式設計罷了 (個人愚見...)。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-704805/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java多執行緒—執行緒同步(單訊號量互斥)Java執行緒
- windows多執行緒同步--訊號量Windows執行緒
- 利用訊號量實現執行緒順序執行執行緒
- 執行緒同步(windows平臺):訊號量執行緒Windows
- iOS多執行緒非同步訊號量iOS執行緒非同步
- Python執行緒專題5:訊號量與有邊界的訊號量Python執行緒
- Python-訊號量和執行緒池-semaphore ThreadPollPython執行緒thread
- C++ 多執行緒框架 (2):Mutex 互斥和 Sem 訊號量C++執行緒框架Mutex
- 關於c#多執行緒中的幾個訊號量C#執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- 基於Boost的資料處理器及執行緒安全類和訊號量執行緒
- 唯快不破:【多執行緒】使用訊號量進行同步執行緒
- VC++ 執行緒同步(轉)C++執行緒
- java多執行緒:併發包中的訊號量和計數栓的程式設計模型Java執行緒程式設計模型
- Java多執行緒併發工具類-訊號量Semaphore物件講解Java執行緒物件
- java-多執行緒-CountDownLatch(閉鎖) CyclicBarrier(柵欄) Semaphore(訊號量)-Java執行緒CountDownLatch
- Swift多執行緒:GCD進階,單例、訊號量、任務組Swift執行緒GC單例
- Qt 中多執行緒對應的訊號槽QT執行緒
- 圖解程式執行緒、互斥鎖與訊號量-看完不懂你來打我圖解執行緒
- 【C/C++多執行緒程式設計之七】pthread訊號量C++執行緒程式設計thread
- qt多執行緒訊號槽傳輸方式QT執行緒
- Java多執行緒-執行緒通訊Java執行緒
- 關於Java多執行緒的執行緒同步和執行緒通訊的一些小問題(順便分享幾篇高質量的博文)Java執行緒
- 程式間通訊機制(管道、訊號、共享記憶體/訊號量/訊息佇列)、執行緒間通訊機制(互斥鎖、條件變數、posix匿名訊號量)記憶體佇列執行緒變數
- android 主執行緒和子執行緒之間的訊息傳遞Android執行緒
- java多執行緒5:執行緒間的通訊Java執行緒
- 執行緒和執行緒池執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- 執行緒4--執行緒間通訊執行緒
- java 多執行緒 CountDownLatch用法Java執行緒CountDownLatch
- Android的執行緒和執行緒池Android執行緒
- 多執行緒-程式和執行緒的概述執行緒
- 執行緒池監控2-監控執行緒池狀態、執行緒數量和佇列任務數量等執行緒佇列
- 執行緒間的通訊執行緒
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- 多執行緒,執行緒類三種方式,執行緒排程,執行緒同步,死鎖,執行緒間的通訊,阻塞佇列,wait和sleep區別?執行緒佇列AI
- Java多執行緒學習——執行緒通訊Java執行緒
- 多執行緒-執行緒組的概述和使用執行緒