Re: [問題] 請問有關多執行緒

看板Programming作者 (ㄚ魚!!)時間14年前 (2011/10/28 15:46), 編輯推噓4(408)
留言12則, 3人參與, 最新討論串2/2 (看更多)
CWinThread* pThread = AfxBeginThread(MyThread,(LPVOID)this); CWinThread* pThread2 = AfxBeginThread(MyThread2,(LPVOID)this); CWinThread* pThread3 = AfxBeginThread(MyThread3,(LPVOID)this); CWinThread* pThread4 = AfxBeginThread(MyThread4,(LPVOID)this); HANDLE m_Thread1 = pThread->m_hThread; HANDLE m_Thread2 = pThread2->m_hThread; HANDLE m_Thread3 = pThread3->m_hThread; HANDLE m_Thread4 = pThread4->m_hThread; ... .... .... ::WaitForSingleObject(m_Thread1,INFINITE); ::WaitForSingleObject(m_Thread2,INFINITE); ::WaitForSingleObject(m_Thread3,INFINITE); ::WaitForSingleObject(m_Thread4,INFINITE); CloseHandle(m_Thread1); CloseHandle(m_Thread2); CloseHandle(m_Thread3); CloseHandle(m_Thread4); ------------------------------------------------ UINT MyThread(LPVOID) { for(int i =0;i<25;i++) function(i); } UINT MyThread2(LPVOID) { for(int i =25;i<50;i++) function(i); } UINT MyThread3(LPVOID) { for(int i =51;i<75;i++) function(i); } UINT MyThread4(LPVOID) { for(int i =75;i<100;i++) function(i); } 以上的是我的C++ code 因為每秒都會有一個input 都要跑過上面的code 一遍 想請問一下 好像常常會跑到一半就停下來不動了 是因為WaitForSingleObject( ,INFINITE); 的關係嗎? 因為網上WaitForSingleObject的範例看得不是很懂 怕一知半解搞錯了,想請問大家這樣寫對嗎? 還請幫忙我看一下 謝謝 ※ 引述《jokingfish (ㄚ魚!!)》之銘言: : 最近自學了多執行緒的寫法 : 程式設計上也還測試OK : 但是還是想進一步加快速度 : 目前我有一個function(int i) i=0~99 : 我只會傻傻地將i的個數切成四分 0~24 25~49 50~74 75~99 : 然後開四個執行緒去跑 : 因為每一個function的執行時間快慢不一 : 可能有一個執行緒跑完25個 另外一個只跑了10個 : 跑完的那個還是要等沒跑完的 感覺這樣有點浪費..... : 請問有沒有寫法讓時間均勻一點? : 比如說讓執行緒去自動去抓還沒跑完的i : 還請版友幫忙 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.112.106

10/30 13:32, , 1F
你這樣好像是A跑完才跑B,之後再跑C,最後D
10/30 13:32, 1F

10/30 13:32, , 2F
依序的跑這樣,不會快
10/30 13:32, 2F

10/30 13:33, , 3F
你可以在function(i)把i值印出來看
10/30 13:33, 3F

10/30 13:34, , 4F
看每次跑是不是都照順序在跑
10/30 13:34, 4F

10/30 13:35, , 5F

10/30 13:35, , 6F
改用我上面貼的這個看會不會好點
10/30 13:35, 6F

10/30 13:37, , 7F
m$的東西我也不太會,僅供參考
10/30 13:37, 7F

10/30 13:44, , 8F
好像我的認知是錯的,sorry
10/30 13:44, 8F

10/30 13:44, , 9F
請忽略
10/30 13:44, 9F

11/10 18:10, , 10F
你這樣寫沒錯 會等待全部完成後才離開
11/10 18:10, 10F

11/10 18:12, , 11F
但重點要注意function內有沒有共用變數
11/10 18:12, 11F

12/05 05:55, , 12F
如果用openMP 應該會更簡潔
12/05 05:55, 12F
文章代碼(AID): #1EgbteGt (Programming)
文章代碼(AID): #1EgbteGt (Programming)