孫鑫MFC深入詳解 第十五章 多執行緒(三)

2021-06-30 16:12:06 字數 1473 閱讀 8551

對命名互斥物件進行例項講解,**如下:

multithread5.cpp

#include #include using namespace std ;

dword winapi threadproc1(lpvoid lpparameter) ;

dword winapi threadproc2(lpvoid lpparameter) ;

int index ;

int tickets = 100 ;

handle hmutex ; // 宣告乙個全域性的互斥物件控制代碼

int main()

} hthread1 = createthread(null, 0, threadproc1, null, 0, null) ;

hthread2 = createthread(null, 0, threadproc2, null, 0, null) ;

closehandle(hthread1) ; // 關閉執行緒核心物件控制代碼, 並沒有阻止新建執行緒的結束, 但是將執行緒核心物件的引用計數減1,

closehandle(hthread2) ; // 當新建執行緒執行完成後, 引用計數也會減1。 當引用計數為0時, 系統就會釋放執行緒核心物件

waitforsingleobject(hmutex, infinite) ;

releasemutex(hmutex) ; // 釋放當前執行緒對互斥物件的所有權

releasemutex(hmutex) ;

sleep(4000) ;

return 0 ;

}dword winapi threadproc1(lpvoid lpparameter)

dword winapi threadproc2(lpvoid lpparameter)

程式執行如下:

可能有人會有疑問,為什麼執行的結果會要執行兩次呢?   其實,對於命名的互斥物件的最大的用處就是判斷當前情況下應用程式是否已經有例項存在。可能有點說不清,舉個例子吧,我們有用過某些軟體,當我們第一次開啟時,我們再次去雙擊執行時,出現的就是我們第一次開啟時的程式,而不會在去建立乙個該程式的應用例項。而命名的互斥物件就是實現這種功能的。

分析:

當我們第一次執行multithread5.cpp時,執行緒

一、執行緒二執行,我們便建立了乙個該程式的例項,當我們不要關閉該例項,在次去執行multithread5.cpp時,程式通過判斷函式createmutex()的返回值error_already_exists來判斷此時已經有了乙個本程式的例項存在,便執行第23、24行**,這樣,輸出的就是上圖中視窗二中的內容

而不會去執行執行緒一和執行緒二了。

孫鑫MFC深入詳解 第十五章 多執行緒(一)

windows中的多執行緒程式設計一直是所有程式設計人員感到困難的乙個地方,主要是在windows多執行緒程式設計中,往往要考慮很多的東西,執行緒啟用的多少,執行緒之間的同步問題等等.下面通過模擬火車售票系統來進行講解 include include using namespace std dwor...

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

VC深入詳解之第十五章多執行緒程式設計

真正完成 執行的是執行緒,而程序知識執行緒的容器,或者說是執行緒的執行環境。執行緒有兩部分組成 執行緒的核心物件和執行緒棧 include include using namespace std dword winapi func1proc lpvoid lpparameter dword wina...