freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[計算機(jī)]多線程編程(編輯修改稿)

2024-09-17 16:38 本頁面
 

【文章內(nèi)容簡介】 創(chuàng)建一個CMutex對象: CMutex mutex(FALSE,NULL,NULL)。 或CMutex mutex。 當(dāng)各線程要訪問共享資源時使用下面代碼: CSingleLock sl(amp。mutex)。 ()。 if(()) //對共享資源進(jìn)行操作... ()。 結(jié)束語 如果用戶的應(yīng)用程序需要多個任務(wù)同時進(jìn)行相應(yīng)的處理,則使用多線程是較理想的選擇。這里,提醒大家注意的是在多線程編程時要特別小心處理資源共享問題以及多線程調(diào)試問題一、引言 在Windows的一個進(jìn)程內(nèi),包含一個或多個線程。線程是指進(jìn)程的一條執(zhí)行路徑,它包含獨立的堆棧和CPU寄存器狀態(tài),每個線程共享所有的進(jìn)程資源,包括打開的文件、信號標(biāo)識及動態(tài)分配的內(nèi)存等等。一個進(jìn)程內(nèi)的所有線程使用同一個32位地址空間,而這些線程的執(zhí)行由系統(tǒng)調(diào)度程序控制,調(diào)度程序決定哪個線程可執(zhí)行以及什么時候執(zhí)行線程。線程有優(yōu)先級別,優(yōu)先權(quán)較低的線程必須等到優(yōu)先權(quán)較高的線程執(zhí)行完任務(wù)后再執(zhí)行。在多處理器的機(jī)器上,調(diào)度程序可將多個線程放到不同的處理器上去運行,這樣就可使處理器的任務(wù)平衡,也提高了系統(tǒng)的運行效率。 32位Windows環(huán)境下的Win32 API提供了多線程應(yīng)用程序開發(fā)所需要的接口函數(shù)。MFC類庫也封裝了多線程編程的類,即我們既可以用Windows提供的API編寫多線程程序,也可以用MFC開發(fā)多線程應(yīng)用程序,因而用戶在開發(fā)時可根據(jù)應(yīng)用程序的需要和特點選擇相應(yīng)的工具。 如果用戶的應(yīng)用程序需要有多個任務(wù)同時進(jìn)行相應(yīng)的處理,則使用多線程是較理想的選擇?! 《?、基于Visual C++的多線程編程 多線程的編程在Win32方式下和MFC類庫支持下的原理是一致的,進(jìn)程的主線程在任何需要的時候都可以創(chuàng)建新的線程。當(dāng)線程執(zhí)行完任務(wù)后,自動中止線程;當(dāng)進(jìn)程結(jié)束后,所有的線程都中止。所有活動的線程共享進(jìn)程的資源。因此,在編程時需要考慮在多個線程訪問同一資源時產(chǎn)生沖突的問題:當(dāng)一個線程正在訪問一個進(jìn)程對象時,另一個線程要改變該對象,這時可能會產(chǎn)生錯誤的結(jié)果。所以,程序員編程時要解決這種沖突。   下面介紹一下在Win32 基礎(chǔ)上進(jìn)行多線程編程的過程?! in32函數(shù)庫中提供了多線程控制的操作函數(shù),包括創(chuàng)建線程、中止線程、建立互斥區(qū)等。首先,在應(yīng)用程序的主線程或者其它活動線程的適當(dāng)?shù)胤絼?chuàng)建新的線程。創(chuàng)建線程的函數(shù)如下:   HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,//指定了線程的安全屬性,在Windows 95中被忽略 DWORD dwStackSize,// 指定了線程的堆棧深度 LPTHREAD_START_ROUTINE lpStartAddress,// 線程函數(shù)LPVOID lpParameter,//指定了線程執(zhí)行時傳送給線程的32位參數(shù)DWORD dwCreationFlags,//指定了線程創(chuàng)建的特性 LPDWORD lpThreadId //指向一個DWORD變量,可返回線程ID值)。 如果創(chuàng)建成功則返回線程的句柄,否則返回NULL。 創(chuàng)建了新的線程后,則該線程就開始啟動執(zhí)行了。如果在dwCreationFlags中用了CREATE_SUSPENDED特性,那么線程并不馬上執(zhí)行,而是先掛起,等到調(diào)用ResumeThread后才開始啟動線程,在這個過程中可以調(diào)用函數(shù):   BOOL SetThreadPriority( HANDLE hThread, int nPriority)。 來設(shè)置線程的優(yōu)先權(quán)。 當(dāng)線程的函數(shù)返回后,線程自動中止。如果在線程的執(zhí)行過程中中止的話,則可調(diào)用函數(shù):   VOID ExitThread( DWORD dwExitCode)。 如果在線程的外面中止線程的話,則可調(diào)用下面的函數(shù):   BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )。 但應(yīng)注意:該函數(shù)可能會引起系統(tǒng)不穩(wěn)定,而且線程所占用的資源也不釋放。因此,一般情況下,建議不要使用該函數(shù)。 如果要中止的線程是進(jìn)程內(nèi)的最后一個線程,則在線程被中止后相應(yīng)的進(jìn)程也應(yīng)中止。    在線程體內(nèi),如果該線程完全獨立,與其它的線程沒有數(shù)據(jù)存取等資源操作上的沖突,則可按照通常單線程的方法進(jìn)行編程。但是,在多線程處理時情況常常不是這樣,線程之間經(jīng)常要同時訪問一些資源。例如,一個線程負(fù)責(zé)公式計算,另一個線程負(fù)責(zé)結(jié)果的顯示,兩個線程都要訪問同一個結(jié)果變量。這時如果不進(jìn)行沖突控制的話,則很可能顯示的是不正確的結(jié)果。 對共享資源進(jìn)行訪問引起沖突是不可避免的,但我們可用以下辦法來進(jìn)行操作控制:   (1) 通過設(shè)置線程的互斥體對象,在可能沖突的地方進(jìn)行同步控制。 首先,建立互斥體對象,得到句柄:   HANDLE CreateMutex( )。 然后,在線程可能沖突區(qū)域的開始(即訪問共享資源之前),調(diào)用WaitForSingleObject將句柄傳給函數(shù),請求占用互斥體對象:   dwWaitResult = WaitForSingleObject(hMutex, 5000L)。 共享資源訪問完后,釋放對互斥體對象的占用:   ReleaseMutex(hMutex)。 互斥體對象在同一時刻只能被一個線程占用。當(dāng)互斥體對象被一個線程占用時,若有另一線程想占用它,則必須等到前一線程釋放后才能成功。   (2) 設(shè)置信號:在操作共享資源前,打開信號;完成操作后,關(guān)閉信號。這類似于互斥體對象的處理。
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1