• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34,comments - 2,trackbacks - 0
            1、線程的組成
            (1)、一個(gè)是線程的內(nèi)核對(duì)象,操作系統(tǒng)用它管理線程。內(nèi)核對(duì)象還是系統(tǒng)用來存放線程統(tǒng)計(jì)信息的地方。
            (2)、一個(gè)線程堆棧,用于維護(hù)線程執(zhí)行時(shí)所需的所有函數(shù)參數(shù)和局部變量。

            2、線程的運(yùn)行
               線程要在其進(jìn)程的地址空間內(nèi)執(zhí)行代碼和處理數(shù)據(jù)。所以,假如一個(gè)進(jìn)程上下文中有兩個(gè)以上的進(jìn)程運(yùn)行,這些線程將共享同一個(gè)地址空間。這些線程可以執(zhí)行同樣的代碼,可以處理相同的數(shù)據(jù)。此外,這些線程還共享內(nèi)核對(duì)象句柄,因?yàn)榫浔硎轻槍?duì)每一個(gè)進(jìn)程的,而不是針對(duì)每一個(gè)線程。

            3、線程的創(chuàng)建、
            (1)、如果應(yīng)用程序中有多個(gè)線程函數(shù),必須為它們指定不同的名稱,否則編譯器/鏈接器會(huì)認(rèn)為你創(chuàng)建了一個(gè)函數(shù)的多個(gè)實(shí)現(xiàn)。
            (2)、你的線程函數(shù)(實(shí)際就是你的所有函數(shù))應(yīng)該盡可能使用函數(shù)參數(shù)和局部變量。使用靜態(tài)和全局變量時(shí),多個(gè)線程可以同時(shí)訪問這些變量,這樣可能會(huì)破壞變量中保存的內(nèi)容。然而,參數(shù)和局部變量是在線程堆棧上創(chuàng)建的。因此,不太可能被其他線程破壞。
            (3)、使用CreateThread、_beginthreadex創(chuàng)建,沒什么好說的。

            4、終止線程
            (1)、線程函數(shù)返回(這是強(qiáng)烈推薦的)。
            這是保證線程的所有資源都被正確清理的惟一方式。讓線程函數(shù)返回,可以確保以下正確的應(yīng)用程序清理工作都得以執(zhí)行:
            ?? 線程函數(shù)中創(chuàng)建的所有C++對(duì)象都通過其析構(gòu)函數(shù)被正確銷毀。
            ?? 操作系統(tǒng)正確釋放線程堆棧使用的內(nèi)存。
            ?? 操作系統(tǒng)把線程的退出代碼(在線程的內(nèi)核對(duì)象中維護(hù))設(shè)為線程函數(shù)的返回值。
            ?? 系統(tǒng)遞減少線程的內(nèi)核對(duì)象的使用計(jì)數(shù)。

            (2)、線程通過調(diào)用ExitThread函數(shù)“殺死”自己(要避免使用這種方法)。
            導(dǎo)致操作系統(tǒng)清理該線程使用的所有操作系統(tǒng)資源。但是,你的C/C++資源(如C++類對(duì)象)不會(huì)被銷毀。

            (3)、同一個(gè)進(jìn)程或另一個(gè)進(jìn)程中的線程調(diào)用TerminateThread函數(shù)(要避免使用這種方法)。
            TerminateThread函數(shù)是異步的。也就是說,它告訴系統(tǒng)你想終止線程,但在函數(shù)返回時(shí),并不
            保證線程已經(jīng)終止了。如果需要確定線程已終止運(yùn)行,還需要調(diào)用WaitForSingleObject。

            (4)、包含線程的進(jìn)程終止運(yùn)行(這種方法避免使用)。
            ExitProcess和TerminateProcess函數(shù)也可用于終止線程的運(yùn)行。區(qū)別在于,這些函數(shù)會(huì)使終止運(yùn)行的進(jìn)程中的所有線程全部終止。同時(shí),由于整個(gè)進(jìn)程都會(huì)關(guān)閉,所以它所使用的所有資源肯定都會(huì)被清理。其中必然包括所有線程的堆棧。這兩個(gè)函數(shù)會(huì)導(dǎo)致進(jìn)程中剩余的所有線程被強(qiáng)行“殺死”,這就好象是我們?yōu)槭S嗟拿總€(gè)線程都調(diào)TerminateThread。
            顯然,這意味著正確的應(yīng)用程序清理工作不會(huì)執(zhí)行:C++對(duì)象的析構(gòu)函數(shù)不會(huì)被調(diào)用,數(shù)據(jù)不會(huì)回寫到磁盤……等等。

            正如我在本章開始就解釋的一樣,當(dāng)應(yīng)用程序的入口函數(shù)返回時(shí),C/C+運(yùn)行庫的啟動(dòng)代碼將調(diào)用ExitProcess。因此,如果應(yīng)用程序中并發(fā)運(yùn)行著多個(gè)線程,你需要在主線程返回之前,顯式地處理好每個(gè)線程的終止過程。否則,其他所有正在運(yùn)行的線程都會(huì)在毫無預(yù)警的前提下突然“死亡”。


            posted on 2011-10-07 23:10 Yu_ 閱讀(263) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計(jì)
            免费无码国产欧美久久18| 香蕉久久影院| 18岁日韩内射颜射午夜久久成人 | 久久久精品久久久久影院| 狠狠色丁香婷婷久久综合五月| 波多野结衣AV无码久久一区| 97热久久免费频精品99| 久久无码人妻精品一区二区三区| 久久精品国产久精国产果冻传媒| 丰满少妇高潮惨叫久久久| 久久久久无码国产精品不卡| 久久精品人人做人人爽97| 久久久国产精品| 久久久精品2019免费观看| 亚洲国产精品综合久久一线| 99精品国产在热久久无毒不卡 | 久久精品国产只有精品66| 亚洲精品白浆高清久久久久久| 国产成人精品久久| 久久国产精品无码一区二区三区| 久久亚洲电影| 久久国产成人精品国产成人亚洲| 亚洲精品乱码久久久久久按摩| 久久激情亚洲精品无码?V| 国内精品久久久久久99蜜桃| 久久精品国产免费观看 | 久久精品中文字幕第23页| 99久久人妻无码精品系列| 人妻无码中文久久久久专区| 欧美伊人久久大香线蕉综合| 无码精品久久一区二区三区 | 精品一区二区久久| 久久精品亚洲日本波多野结衣| 久久久久免费精品国产| 2020国产成人久久精品| 久久亚洲精品成人无码网站| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 精品久久一区二区| 国产精品久久永久免费| 久久99精品久久久久婷婷| 久久综合狠狠综合久久|