**對windows執行緒進行了很好的抽象,用物件導向的思想進行了封裝,使用者只用重點關注三個函式:
1、oneventthreadrun --執行緒執行函式
2、oneventthreadstrat --執行緒開始事件
3、oneventthreadconclude --執行緒結束事件
物件宣告
1//執行緒物件
2class
service_core_class cwhthread333
//執行緒控制代碼
34 handle getthreadhandle()
35//
投遞訊息
36lresult postthreadmessage(uint umessage, wparam wparam, lparam lparam);
3738
//事件函式
39protected:40
//執行事件
41virtual
bool oneventthreadrun()
42//
開始事件
43virtual
bool oneventthreadstrat()
44//
終止事件
45virtual
bool oneventthreadconclude()
4647
//內部函式
48private:49
//執行緒函式
50static
unsigned __stdcall threadfunction(lpvoid pthreaddata);
51};
5253
//
物件實現
1 #include "stdafx.h
"2 #include "
whthread.h"3
4//5
//結構定義67
//啟動引數
8struct
tagthreadparameter9;
1415//
1617
//建構函式
18cwhthread::cwhthread()
1927
28//
析構函式
29 cwhthread::~cwhthread()
3036
37//
狀態判斷
38bool
cwhthread::isruning()
3946
47//
啟動執行緒
48bool
cwhthread::startthread()
4964
65//
變數定義
66tagthreadparameter threadparameter;
67 zeromemory(&threadparameter,sizeof
(threadparameter));
6869
//設定變數
70 threadparameter.bsuccess=false
;71 threadparameter.pservicethread=this
;72 threadparameter.heventfinish=createevent(null,false,false,null);
7374
//效驗狀態
75 assert(threadparameter.heventfinish!=null);
76if (threadparameter.heventfinish==null) return
false;77
78//
啟動執行緒
79 m_brun=true
;80 m_hthreadhandle=(handle)::_beginthreadex(null,0,threadfunction,&threadparameter,0,&m_uthreadid);
8182
//錯誤判斷
83if (m_hthreadhandle==invalid_handle_value)
8488
89//
等待事件。等待oneventthreadstrat事件執行結束
90waitforsingleobject(threadparameter.heventfinish,infinite);
91closehandle(threadparameter.heventfinish);
9293
//判斷錯誤。如果oneventthreadstrat返回失敗,那麼結束執行緒。
94if (threadparameter.bsuccess==false)95
99100
return
true
;101
}102
103//
停止執行緒
104bool
cwhthread::concludethread(dword dwmillseconds)
105117
}118
119//
設定變數
120if (m_hthreadhandle!=null)
121129
130return
true
;131
}132
133//
投遞訊息
134lresult cwhthread::postthreadmessage(uint umessage, wparam wparam, lparam lparam)
135146
147return0l;
148}
149150
//執行緒函式
151unsigned __stdcall cwhthread::threadfunction(lpvoid pthreaddata)
152
165catch
(...)
166171
172//
設定事件
173bool bsuccess=pthreadparameter->bsuccess;
174 assert(pthreadparameter->heventfinish!=null);
175if (pthreadparameter->heventfinish!=null) setevent(pthreadparameter->heventfinish);
176177
//執行緒處理
178if (bsuccess==true
)179
191}
192catch
(...)
193#else
194//
除錯版本
195if (pservicethread->oneventthreadrun()==false
)196
199#endif
200}
201202
//停止通知
203try
204
207catch
(...)
208}
209210
//中止執行緒
211 _endthreadex(0l
);212
213return0l;
214}
215216
//
這裡有幾個注意點:
1、heventfinish用於控制oneventthreadstrat是否執行結束;
2、oneventthreadstrat啟動返回失敗,那麼執行緒執行結束;
3、m_brun用於控制是否進入oneventthreadrun執行,為false,退出迴圈,執行緒執行結束;
4、oneventthreadrun返回失敗,那麼執行緒執行結束;
Java核心類庫,執行緒通訊
執行緒通訊 不同的執行緒執行不同的任務,如果這些任務有某種關係,執行緒之間必須能夠通訊,協調完成工作。我們來看乙個案例 生產者和消費者案例 producer consumer 生產者和消費者應該操作共享的資源 實現方式來做 使用乙個或多個執行緒來表示生產者producer 使用乙個或多個執行緒來表示...
執行緒池總類以及執行緒池的核心引數簡述
jdk自帶執行緒池總類 1 newfixedthreadpool建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個工作執行緒,如果工作執行緒數量達到執行緒池初始的最大數,則將提交的任務存入到池佇列中。2 newcachedthreadpool建立乙個可快取的執行緒池。這種型別的執行緒池...
建立核心執行緒
在作業系統的最小執行單元就是執行緒,在核心中線程的概念更加容易看出來。比如說有的時候需要使用執行緒來完成一些任務,可是這些任務的工作量過大的時候系統處理這些任務就必須停下來等待。而等待的過程就大大的浪費了cup寶貴的時間,所以這個時候利用多執行緒去處理是最好的方法。在驅動裡生成的執行緒一般是系統執行...