• <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>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

            C++多線程(一)

            WIN 多線程API

            一 簡單實例
            比較簡單的代碼,創(chuàng)建10個線程,其中使第4個線程在一創(chuàng)建就掛起,等到其他的線程執(zhí)行的差不多的時候再使第4個線程恢復(fù)執(zhí)行。
            #include <stdio.h> 
            #include 
            <stdlib.h> 
            #include 
            <windows.h> 

            #define THREAD_NUM 10

            DWORD WINAPI PrintThreads (LPVOID);

            int main () 

                HANDLE hThread[THREAD_NUM]; 
                DWORD dwThreadID[THREAD_NUM]; 

                
            for (int i=0; i<THREAD_NUM; ++i) 
                

                    
            int isStartImmediate = 0;
                    
            if(3 == i)
                        isStartImmediate 
            = CREATE_SUSPENDED;
                    hThread[i]
            =CreateThread(NULL,                // security attributes that should be applied to the new thread, 
                                                                                             
            // this is for NT. Use NULL to get the default security attributes. Use NULL for win95 
                                            0,                                            // default size of 1MB can be passed by passing zero. 
                                            PrintThreads,                     // function name:address of the function where the new thread starts.
                                            (LPVOID)i,                         // parameter(void pointer): pointer to the 32 bit parameter that will be passed into the thread
                                            isStartImmediate,             // flags to control the creation of the thread. Passing zero starts the thread immediately. 
                                                                                      
            // Passing CREATE_SUSPENDED suspends the thread until the ResumeThread( ) function is called.
                                            &dwThreadID[i]            // pointer to a 32-bit variable that receives the thread identifier.
                                            ); 
                    
            if (hThread[i])
                    

                        printf (
            "Thread launched successfully\n");                
                    }
                     
                }
             
                printf(
            "Start sleep 100, and let other thread excute\n");
                Sleep (
            100);    

                printf(
            "Start sleep 100, and thread 3 excute\n");
                ResumeThread(hThread[
            3]);
                
                Sleep(
            100);

                
            for(int i = 0; i<THREAD_NUM; ++i)
                
            {
                    
            if (hThread[i])
                    
            {            
                        CloseHandle(hThread[i]);    
            // You need to use this to release kernel objects when you are done using them. 
                                                    
            // If a process exits without closing the thread handle, 
                                                    
            // the operating system drops the reference counts for those objects. 
                                                    
            // But if a process frequently creates threads without closing the handles, 
                                                    
            // there could be hundreds of thread kernel objects lying around and these resource leaks can have a big hit on performance.
                    }
             
                }

                
            return (0); 
            }
             

            //function PrintThreads 
            DWORD WINAPI PrintThreads (LPVOID num)
            {
                
            for (int i=0; i<10; i++
                    printf (
            "Thread Number is %d%d%d\n", num,num,num); 
                
            return 0;
            }


            二 其他基本API的說明
            CreateThread() 調(diào)用成功返回句柄和一個id。
            CloseHandle()  關(guān)閉一個打開的對象句柄,該對象句柄可以是線程句柄,也可以是進程、信號量等其他內(nèi)核對象的句柄.

            SuspendThread(HANDLE) 允許開發(fā)人員將HANDLE指定的線程掛起,如果要掛起的線程占有共享資源,則可能導(dǎo)致死鎖。
            ResumeThread(HANDLE)  恢復(fù)指定的線程。

            TerminateThread() 立即終止線程的工作,不做任何清理工作。
            ExitThread() 線程函數(shù)返回時回調(diào)用次函數(shù),所以一般我們不去顯示的調(diào)用。

            ExitThread是推薦使用的結(jié)束一個線程的方法,當(dāng)調(diào)用該函數(shù)時,當(dāng)前線程的棧被釋放,然后線程終止,相對于TerminateThread函數(shù)來說,這樣做能夠更好地完成附加在該線程上的DLL的清除工作. 但是ExitThread()會導(dǎo)致線程在清處構(gòu)造器/自動變量之前就終止,所以我們最好不要顯示的調(diào)用ExitThread()。

            posted on 2007-07-24 18:16 夢在天涯 閱讀(13727) 評論(5)  編輯 收藏 引用 所屬分類: CPlusPlus

            評論

            # re: C++多線程(一) 2007-07-24 19:18 pass86

            不大喜歡這樣的的API調(diào)用,希望學(xué)習(xí)Boost.Thread或者ACE的線程封裝。  回復(fù)  更多評論   

            # re: C++多線程(一) 2007-07-24 21:41 ano

            BOOST的線程庫不是挺好嗎,自己造輪子嗎  回復(fù)  更多評論   

            # re: C++多線程(一) 2007-07-25 16:24 黃大仙

            支持樓主  回復(fù)  更多評論   

            # re: C++多線程(一) 2008-07-09 23:03 honeymorning

            Multithreading Applications in Win32  回復(fù)  更多評論   

            # re: C++多線程(一) 2009-04-17 20:52 好開心

            為啥只創(chuàng)建和結(jié)束線程,沒有對線程如何進行分工完成各自任務(wù)一起編進來呢,這樣就完美了,對我的用處就非常大了,不過還是有學(xué)習(xí)價值的,呵呵。  回復(fù)  更多評論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804834
            • 排名 - 5

            最新評論

            閱讀排行榜

            国产免费久久精品丫丫| 久久噜噜电影你懂的| 亚洲αv久久久噜噜噜噜噜| 欧美麻豆久久久久久中文| 99久久无色码中文字幕| 久久久无码精品亚洲日韩按摩 | 亚洲国产小视频精品久久久三级 | 国产精品久久久久久久久久免费| 777米奇久久最新地址| 久久99精品久久久久久动态图| 国产一区二区三区久久精品| 精品午夜久久福利大片| 99国产精品久久| 久久久久久免费一区二区三区| 久久综合狠狠综合久久激情 | 亚洲国产精品无码久久九九| 一级a性色生活片久久无| 久久精品人妻中文系列| 人妻精品久久无码区| 久久99精品久久久久久不卡| 热综合一本伊人久久精品| 一本一本久久a久久精品综合麻豆| 久久夜色精品国产噜噜亚洲a| 久久婷婷五月综合色高清| 久久精品水蜜桃av综合天堂| 久久99精品综合国产首页| 久久av免费天堂小草播放| 精品无码久久久久国产动漫3d| 亚洲国产精品高清久久久| 91精品久久久久久无码| 亚洲国产小视频精品久久久三级| 色综合久久无码中文字幕| 99热成人精品免费久久| 久久婷婷五月综合国产尤物app| AV狠狠色丁香婷婷综合久久| 久久精品国产99久久丝袜| 精品久久久久久| 久久99这里只有精品国产| 久久久久亚洲AV成人网| 久久国产热精品波多野结衣AV| 国产精品热久久毛片|