新聞中心
C++編程語言中支持多線程運(yùn)行。那么如何才能正確的實(shí)現(xiàn)這一功能呢?今天我們就在這里先通過一個(gè)帶來范例來詳細(xì)解讀C++多線程的應(yīng)用方式,希望初學(xué)者們可以根據(jù)我們介紹的內(nèi)容從中學(xué)到一些知識(shí)。

創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。10多年品質(zhì),值得信賴!
C++多線程應(yīng)用示例:
主線程創(chuàng)建2個(gè)線程t1和t2,創(chuàng)建時(shí)2個(gè)線程就被掛起,后來調(diào)用ResumeThread恢復(fù)2個(gè)線程,是其開始執(zhí)行,調(diào)用WaitForSingleObject等待2個(gè)線程執(zhí)行完,然后推出主線程即結(jié)束進(jìn)程。
- #include
- #include
// for STL string class - #include
// for HANDLE - #include
// for _beginthread() - using namespace std;
- class ThreadX
- {
- private:
- int loopStart;
- int loopEnd;
- int dispFrequency;
- public:
- string threadName;
- ThreadX( int startValue, int endValue, int frequency )
- {
- loopStart = startValue;
- loopEnd = endValue;
- dispFrequency = frequency;
- }
- static unsigned __stdcall ThreadStaticEntryPoint(void * pThis)
- {
- ThreadX * pthX = (ThreadX*)pThis; // the tricky cast
- pthX->ThreadEntryPoint(); // now call the true entry-point-function
- return 1; // the thread exit code
- }
- void ThreadEntryPoint()
- {
- for (int i = loopStart; i <= loopEnd; ++i)
- {
- if (i % dispFrequency == 0)
- {
- printf( "%s: i = %d\n", threadName.c_str(), i );
- }
- }
- printf( "%s thread terminating\n", threadName.c_str() );
- }
- };
- int main()
- {
- ThreadX * o1 = new ThreadX( 0, 1, 2000 );
- HANDLE hth1;
- unsigned uiThread1ID;
- hth1 = (HANDLE)_beginthreadex( NULL, // security
- 0, // stack size
- ThreadX::ThreadStaticEntryPoint,
- o1, // arg list
- CREATE_SUSPENDED, // so we can later call ResumeThread()
- &uiThread1ID );
- if ( hth1 == 0 )
- printf("Failed to create thread 1\n");
- DWORD dwExitCode;
- GetExitCodeThread( hth1, &dwExitCode ); // should be STILL_ACTIVE = 0x00000103 = 259
- printf( "initial thread 1 exit code = %u\n", dwExitCode );
- o1->threadName = "t1";
- ThreadX * o2 = new ThreadX( -1000000, 0, 2000 );
- HANDLE hth2;
- unsigned uiThread2ID;
- hth2 = (HANDLE)_beginthreadex( NULL, // security
- 0, // stack size
- ThreadX::ThreadStaticEntryPoint,
- o2, // arg list
- CREATE_SUSPENDED, // so we can later call ResumeThread()
- &uiThread2ID );
- if ( hth2 == 0 )
- printf("Failed to create thread 2\n");
- GetExitCodeThread( hth2, &dwExitCode ); // should be STILL_ACTIVE = 0x00000103 = 259
- printf( "initial thread 2 exit code = %u\n", dwExitCode );
- o2->threadName = "t2";
- ResumeThread( hth1 ); // serves the purpose of Jaeschke's t1->Start()
- ResumeThread( hth2 );
- WaitForSingleObject( hth1, INFINITE );
- WaitForSingleObject( hth2, INFINITE );
- GetExitCodeThread( hth1, &dwExitCode );
- printf( "thread 1 exited with code %u\n", dwExitCode );
- GetExitCodeThread( hth2, &dwExitCode );
- printf( "thread 2 exited with code %u\n", dwExitCode );
- CloseHandle( hth1 );
- CloseHandle( hth2 );
- delete o1;
- o1 = NULL;
- delete o2;
- o2 = NULL;
- printf("Primary thread terminating.\n");
- }
以上就是對(duì)C++多線程的相關(guān)介紹。
【編輯推薦】
- C++獲得系統(tǒng)時(shí)間不同方案介紹
- C++靜態(tài)成員函數(shù)基本概念講解
- C++靜態(tài)數(shù)據(jù)成員定義及應(yīng)用淺談
- C++指針重載應(yīng)用代碼解讀
- C++模板函數(shù)重載不同之處點(diǎn)評(píng)
網(wǎng)站標(biāo)題:C++多線程代碼范例剖析
URL分享:http://m.fisionsoft.com.cn/article/dpsocdp.html


咨詢
建站咨詢
