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

正文內(nèi)容

[計(jì)算機(jī)]多線程編程-在線瀏覽

2024-10-01 16:38本頁面
  

【正文】 rminateThread(HANDLE hThread,DWORD dwExitCode)。因此,一般情況下,建議不要使用該函數(shù)。 2. 線程的同步 在 線程體內(nèi),如果該線程完全獨(dú)立,與其他線程沒有數(shù)據(jù)存取等資源操作上的沖突,則可按照通常單線程的方法進(jìn)行編程。由于對(duì)共享資源進(jìn)行訪問引起沖突是不可避免的,為了解決這種線程同步問題,Win32 API提供了多種同步控制對(duì)象來幫助程序員解決共享資源訪問沖突。 Win32 API提供了一組能使線程阻塞其自身執(zhí)行的等待函數(shù)。在等待函數(shù)未 返回時(shí),線程處于等待狀態(tài),此時(shí)線程只消耗很少的CPU時(shí)間。最常用的等待函數(shù)是: DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)。 (1)互斥體對(duì)象 Mutex對(duì)象的狀態(tài)在它不被任何線程擁有時(shí)才有信號(hào),而當(dāng)它被擁有時(shí)則無信號(hào)??砂聪铝胁襟E使用該對(duì)象: 首先,建立互斥體對(duì)象,得到句柄: HANDLE CreateMutex()。 共享資源訪問結(jié)束,釋放對(duì)互斥體對(duì)象的占用: ReleaseMutex(hMutex)。 (2)信號(hào)對(duì)象 信 號(hào)對(duì)象允許同時(shí)對(duì)多個(gè)線程共享資源進(jìn)行訪問,在創(chuàng)建對(duì)象時(shí)指定最大可同時(shí)訪問的線程數(shù)。其中,計(jì)數(shù)器值大于或等于0,但小于或等于創(chuàng)建時(shí)指定的最大值。等初始化完成后,調(diào)用ReleaseSemaphore函數(shù)將其計(jì)數(shù)器增加至最 大值,則可進(jìn)行正常的存取訪問。 或者打開一個(gè)信號(hào)對(duì)象: HANDLE OpenSemaphore()。 共享資源訪問完成后,應(yīng)釋放對(duì)信號(hào)對(duì)象的占用: ReleaseSemaphore()。在線程訪問某一資源之前,需要等待某一事件的發(fā)生,這時(shí)用事件對(duì)象最合適。 事 件對(duì)象是用CreateEvent函數(shù)建立的。如果是手工重置事件,那么它總是保持有信號(hào)狀態(tài),直到用 ResetEvent函數(shù)重置成無信號(hào)的事件。用SetEvent可以把事件 對(duì)象設(shè)置成有信號(hào)狀態(tài)。 (4)排斥區(qū)對(duì)象 在排斥區(qū)中異步執(zhí)行時(shí),它只能在同一進(jìn)程的線程之間共享資源處理。 使用時(shí)先定義一個(gè)CRITICAL_SECTION結(jié)構(gòu)的排斥區(qū)對(duì)象,在進(jìn)程使用之前調(diào)用如下函數(shù)對(duì)對(duì)象進(jìn)行初始化: VOID InitializeCriticalSection(LPCRITICAL_SECTION)。 當(dāng)要求占用、退出排斥區(qū)時(shí),調(diào)用函數(shù)LeaveCriticalSection,釋放對(duì)排斥區(qū)對(duì)象的占用,供其他線程使用。由于其快速、簡捷、功能強(qiáng)大等特點(diǎn)深受廣大開發(fā)者喜愛。 在VC++附帶的MFC類庫中,提供了對(duì)多線程編程的支持,基本原理與基于Win32 API的設(shè)計(jì)一致,但由于MFC對(duì)同步對(duì)象做了封裝,因此實(shí)現(xiàn)起來更加方便,避免了對(duì)象句柄管理上的煩瑣工作。工作線程與前面所述的線程一致,用戶接口線程是一種能夠接收用戶的輸入、處理事件和消息的線程。 如果線程用到共享資源,則需要進(jìn)行資源同步處理。參數(shù)pfnThreadProc是線程執(zhí)行體函數(shù),函數(shù)原形為: UINT ThreadFunction( LPVOID pParam)。 參數(shù)dwCreateFlags是線程創(chuàng)建時(shí)的標(biāo)志,可取值CREATE_SUSPENDED,表示線程創(chuàng)建后處于掛起狀態(tài),調(diào)用ResumeThread函數(shù)后線程繼續(xù)運(yùn)行,或者取值“0”表示線程創(chuàng)建后處于運(yùn)行狀態(tài)。 注意:如果在一個(gè)類對(duì)象中創(chuàng)建和啟動(dòng)線程時(shí),應(yīng)將線程函數(shù)定義成類外的全局函數(shù)。當(dāng)線程執(zhí)行完并退出線程時(shí),由于進(jìn)程中沒有其他線程 存在,進(jìn)程自動(dòng)結(jié)束。我們?cè)诰帉懹脩艚涌诰€程時(shí),需要從 CWinThread派生我們自己的線程類,ClassWizard可以幫助我們完成這個(gè)工作。注意:類的DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏是必需的,因?yàn)閯?chuàng)建線 程時(shí)需要?jiǎng)討B(tài)創(chuàng)建類的對(duì)象。如果需要?jiǎng)?chuàng)建窗口,則 可在InitInstance函數(shù)中完成??梢杂脙煞N方法來創(chuàng)建用戶接口線程,MFC提供了兩個(gè)版本的 AfxBeginThread函數(shù),其中一個(gè)用于創(chuàng)建用戶接口線程。線程建立并啟動(dòng)后,在線程函數(shù)執(zhí)行過程中一直有效。CWinThread已經(jīng)為我們完成了線程結(jié)束的工作。另外,MFC對(duì)兩個(gè)等待函數(shù)也進(jìn)行了封裝,即CSingleLock和CMultiLock。 或CMutex mutex。mutex)。 if(()) //對(duì)共享資源進(jìn)行操作... ()。這里,提醒大家注意的是在多線程編程時(shí)要特別小心處理資源共享問題以及多線程調(diào)試問題一、引言 在Windows的一個(gè)進(jìn)程內(nèi),包含一個(gè)或多個(gè)線程。一個(gè)進(jìn)程內(nèi)的所有線程使用同一個(gè)32位地址空間,而這些線程的執(zhí)行由系統(tǒng)調(diào)度程序控制,調(diào)度程序決定哪個(gè)線程可執(zhí)行以及什么時(shí)候執(zhí)行線程。在多處理器的機(jī)器上,調(diào)度程序可將多個(gè)線程放到不同的處理器上去運(yùn)行,這樣就可使處理器的任務(wù)平衡,也提高了系統(tǒng)的運(yùn)行效率。MFC類庫也封裝了多線程編程的類,即我們既可以用Windows提供的API編寫多線程程序,也可以用MFC開發(fā)多線程應(yīng)用程序,因而用戶在開發(fā)時(shí)可根據(jù)應(yīng)用程序的需要和特點(diǎn)選擇相應(yīng)的工具?! 《?、基于Visual C++的多線程編程當(dāng)線程執(zhí)行完任務(wù)后,自動(dòng)中止線程;當(dāng)進(jìn)程結(jié)束后,所有的線程都中止。因此,在編程時(shí)需要考慮在多個(gè)線程訪問同一資源時(shí)產(chǎn)生沖突的問題:當(dāng)一個(gè)線程正在訪問一個(gè)進(jìn)程對(duì)象時(shí),另一個(gè)線程要改變?cè)搶?duì)象,這時(shí)可能會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。   下面介紹一下在Win32 基礎(chǔ)上進(jìn)行多線程編程的過程。Win32函數(shù)庫中提供了多線程控制的操作函數(shù),包括創(chuàng)建線程、中止線程、建立互斥區(qū)等。創(chuàng)建線程的函數(shù)如下:   HANDLE CreateThread DWORD dwStackSize,// 指定了線程的堆棧深度LPVOID lpParameter,//指定了線程執(zhí)行時(shí)傳送給線程的32位參數(shù)DWORD dwCreationFlags,//指定了線程創(chuàng)建的特性)。 創(chuàng)建了新的線程后,則該線程就開始啟動(dòng)執(zhí)行了。 來設(shè)置線程的
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1