C++多線程代碼范例剖析
作者:佚名 
  在這篇文章中,我們通過在主線程中創(chuàng)建兩個線程的方法來為大家詳細解讀C++多線程的具體應(yīng)用方法,以方便大家將來的實際應(yīng)用。
 C++編程語言中支持多線程運行。那么如何才能正確的實現(xiàn)這一功能呢?今天我們就在這里先通過一個帶來范例來詳細解讀C++多線程的應(yīng)用方式,希望初學(xué)者們可以根據(jù)我們介紹的內(nèi)容從中學(xué)到一些知識。
C++多線程應(yīng)用示例:
主線程創(chuàng)建2個線程t1和t2,創(chuàng)建時2個線程就被掛起,后來調(diào)用ResumeThread恢復(fù)2個線程,是其開始執(zhí)行,調(diào)用WaitForSingleObject等待2個線程執(zhí)行完,然后推出主線程即結(jié)束進程。
- #include <stdio.h>
 - #include <string> // for STL string class
 - #include <windows.h> // for HANDLE
 - #include <process.h> // 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++多線程的相關(guān)介紹。
【編輯推薦】
責(zé)任編輯:曹凱 
                    來源:
                    博客園
 














 
 
 





 
 
 
 