vc入門寶典六(多執行緒) (轉)
多執行緒:namespace prefix = o ns = "urn:schemas--com::office" />
/develop/author/netauthor/he_zhidan/">何志丹
主要內容:
1, 工作者執行緒
2, 介面執行緒
3, 同步
執行緒被分為工作者執行緒和使用者使用者介面執行緒。使用者介面的執行緒的特點是擁有單獨的訊息佇列,可以具有自己的視窗介面,能夠對使用者輸入和事件作出反應。
可以用以下方法建立一個工作者執行緒。
UINT MyThreadProc(LPVOID pParam)
{
…
}
AfxBeginThread(MyThread,..);
它有六個引數,第一個為控制,第二個為啟動執行緒時傳給控制函式的入口引數,當前執行緒的優先順序,當前執行緒的棧的大小,當前執行緒的建立狀態,屬性,後四個有預設值。
使用者介面執行緒:
首先利用應用嚮導建立單文件程式Thread,再建立Thread1 : public CWinThread,
Frame1 : public CFrameWnd,可以用Ctrl+w建立這兩個新類。
在CThreadApp中加一個指標Thread1* pThread1,在BOOL CThreadApp::InitInstance()
中進行初始化:
pThread1 = new Thread1();
pThread1->CreateThread();
將Thread1的建構函式改成公有。
在Thread1中加一個指標Frame1* m_pWnd,然後初始化。
BOOL Thread1::InitInstance()
{
m_pWnd = new Frame1();
return TRUE;
}
把Frame1的建構函式改成公有,在Thread.h中包含#include "Frame1.h"。
在資源編輯器中編輯一個選單IDR_MENU,它有一個選單項ID_BEGIN。
Frame1::Frame1()
{
Create(NULL,"Demo");
ShowWindow(SW_SHOW);
UpdateWindow();
CMenu menu;//可以用區域性變數,因為以後不會用到它了,加選單。
menu.LoadMenu(IDR_MENU);
SetMenu(&menu);
}
同步
多執行緒的一個難點是各執行緒間的協調。同樣的方法在CThreadApp中再開一個執行緒。
BOOL CThreadApp::InitInstance()
{
。。。。。。
pThread1 = new Thread1();
pThread1->CreateThread();
pThread2 = new Thread1();
pThread2->CreateThread();
。。。。。。
}
為IDR_MENU中的選單在Frame1中設立響應函式,方法也是Ctrl+w開啟類嚮導。並在Frame1中定義一個全域性整形變數n,初始值為0.
HANDLE handle=CreateSemaphore(NULL,0,1,"he");
WaitForSingle(handle,10000);
CString str;
n++;
str.Format("第%d次工作",n);
MessageBox(str);
ReleaseSemaphore(handle,1,NULL);
當你點選Frame1的選單時,會彈出一個對話方塊,暫時不要點 確定,點選另一個執行緒的選單,暫不會彈出對話方塊,確定剛才的對話方塊,另一個執行緒的對話方塊也彈出來了。
這個同步的方法稱為訊號量。它允許有限的執行緒存取某個共享的資源,採用計數器來實現訊號量。
HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpa,LONG cSemInitial,LONG cSemMax,LPTSR lpszSemName);
第一個引數來指明所建立的是否可以被其子程式繼承。如果你希望在所有的子程式之間共享這個訊號量,可以把它的成員bInheritHandle設為true,也可以直接設為NULL來使用預設的安全設定第二個引數是還可以讓幾個執行緒使用,第三個引數是最多可以讓幾個執行緒使用。
最後引數是訊號量的名字,在其它的程式中CreateSemapphore()或OpenSemaphore()時使用這個字串作為引數之一就可以得到訊號量的控制程式碼。
ReleaseSemaphore(HANDLE hSemaphore, LONG cRelease,LPLONG plPrev)
第二個表示一次釋放幾,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993543/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java多執行緒(一)多執行緒入門篇Java執行緒
- Java多執行緒入門Java執行緒
- 入門python多執行緒/多程式Python執行緒
- 多執行緒與高併發(一)多執行緒入門執行緒
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- 多執行緒基礎入門執行緒
- Android入門教程 | 多執行緒Android執行緒
- day20_多執行緒入門丶執行緒安全執行緒
- Java入門教程十三(多執行緒)Java執行緒
- go語言多執行緒入門筆記-執行緒同步Go執行緒筆記
- Java多執行緒(六) volatileJava執行緒
- Java入門系列-21-多執行緒Java執行緒
- Java多執行緒傻瓜入門介紹Java執行緒
- Java 高階 --- 多執行緒快速入門Java執行緒
- java多執行緒的入門小記Java執行緒
- python爬蟲入門八:多程式/多執行緒Python爬蟲執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- VC編寫多執行緒sql盲注工具.doc執行緒SQL
- 多執行緒經典面試題執行緒面試題
- Java多執行緒 -- wait() 和 notify() 使用入門Java執行緒AI
- c++11 多執行緒入門教程(一)C++執行緒
- QT從入門到入土(四)——多執行緒QT執行緒
- Tungsten Fabric入門寶典丨首次啟動和執行指南
- Java 多執行緒基礎(六)執行緒等待與喚醒Java執行緒
- 多執行緒和多執行緒同步執行緒
- QT從入門到入土(四)——多執行緒(QtConcurrent::run())QT執行緒
- 實驗六 Java多執行緒設計Java執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- easyexcel多sheet多執行緒匯入示例,獲取所以執行緒執行結果後返回Excel執行緒
- 敲開阿里大門的執行緒、多執行緒和執行緒池面試專題阿里執行緒面試
- Java多執行緒-執行緒中止Java執行緒
- 多執行緒之初識執行緒執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- a、多執行緒執行緒
- Java-基礎-執行緒入門Java執行緒