新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++多線程代碼范例剖析
C++編程語言中支持多線程運行。那么如何才能正確的實現(xiàn)這一功能呢?今天我們就在這里先通過一個帶來范例來詳細解讀C++多線程的應用方式,希望初學者們可以根據(jù)我們介紹的內(nèi)容從中學到一些知識。

創(chuàng)新互聯(lián)是網(wǎng)站建設技術企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站建設、成都做網(wǎng)站,網(wǎng)站設計,網(wǎng)站制作,網(wǎng)站改版等技術服務。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。10多年品質,值得信賴!
C++多線程應用示例:
主線程創(chuàng)建2個線程t1和t2,創(chuàng)建時2個線程就被掛起,后來調(diào)用ResumeThread恢復2個線程,是其開始執(zhí)行,調(diào)用WaitForSingleObject等待2個線程執(zhí)行完,然后推出主線程即結束進程。
- #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");
- }
以上就是對C++多線程的相關介紹。
【編輯推薦】
- C++獲得系統(tǒng)時間不同方案介紹
- C++靜態(tài)成員函數(shù)基本概念講解
- C++靜態(tài)數(shù)據(jù)成員定義及應用淺談
- C++指針重載應用代碼解讀
- C++模板函數(shù)重載不同之處點評
分享題目:C++多線程代碼范例剖析
網(wǎng)頁URL:http://m.5511xx.com/article/dpsocdp.html


咨詢
建站咨詢
