C++如何建立一個類用來管理多個執行緒,每個執行緒互不影響,各自有各自的執行緒函式?
uj5u.com熱心網友回復:
可以參考下 CWinThread Classuj5u.com熱心網友回復:
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);
創建的執行緒,各執行緒除非你通過共享資源進行了強制的聯系,否則,執行緒都是各自獨立的,甚至多個執行緒你使用了相同的執行緒函式(不能使用全域變數)
uj5u.com熱心網友回復:
我這個需要執行緒池來管理各個執行緒。
uj5u.com熱心網友回復:
我一般的 從CWinThread 派生新類, 完成執行緒功能CTypedPtrArray <CPtrArray, CWinThread*> 來存盤執行緒串列
執行緒池參考官方檔案 Thread Pools
uj5u.com熱心網友回復:
主執行緒創建若干個執行緒,每個執行緒有一個獨立的事件(通過CreateEvent創建)hEvent,(可以保存到一個陣列中,每個單元實際已經對應于一個執行緒)
事件通過WaitForSingleObject控制執行緒運行,執行緒運行到WaitForSingleObject時,就會進入等待事件,不占用系統資源
當某個資料需要處理時,呼叫SetEvent,這樣就可以控制和調度執行緒。
uj5u.com熱心網友回復:
厲害
uj5u.com熱心網友回復:
https://github.com/gdlxSong/GdlLib/tree/master/gdltool/threadpooluj5u.com熱心網友回復:
就是執行緒池,c++11實作,非常簡單uj5u.com熱心網友回復:
建議參考boost庫的thread_grouphttps://blog.csdn.net/hanshuobest/article/details/53984660
uj5u.com熱心網友回復:
// 開始通訊void Car::startSocket()
{
m_pSocket = ( theApp.m_bDemo || theApp.m_bDemoCar )
? new CarDemo( this ) // 測驗狀態,啟動Demo
: new CarSocket( this );
ASSERT( m_pSocket );
ASSERT( m_pSocket->getSocket() == INVALID_SOCKET );
// 開啟執行緒,設定最高優先級,實時采集
CWinThread * pThread = AfxBeginThread( CarSocket::threadPro, (LPVOID)m_pSocket, THREAD_PRIORITY_TIME_CRITICAL );
m_pSocket->m_pThread = pThread;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/26961.html
標籤:進程/線程/DLL
上一篇:error C2146: syntax error : missing ';' before identifier 'KSPIN
