作者jokingfish (ㄚ魚!!)
看板Programming
標題Re: [問題] 請問有關多執行緒
時間Fri Oct 28 15:46:45 2011
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
1F:推 cgcheng:你這樣好像是A跑完才跑B,之後再跑C,最後D 59.115.20.84 10/30 13:32
2F:→ cgcheng:依序的跑這樣,不會快 59.115.20.84 10/30 13:32
3F:→ cgcheng:你可以在function(i)把i值印出來看 59.115.20.84 10/30 13:33
4F:→ cgcheng:看每次跑是不是都照順序在跑 59.115.20.84 10/30 13:34
6F:→ cgcheng:改用我上面貼的這個看會不會好點 59.115.20.84 10/30 13:35
7F:→ cgcheng:m$的東西我也不太會,僅供參考 59.115.20.84 10/30 13:37
8F:推 cgcheng:好像我的認知是錯的,sorry 59.115.20.84 10/30 13:44
9F:→ cgcheng:請忽略 59.115.20.84 10/30 13:44
10F:推 lingpxs:你這樣寫沒錯 會等待全部完成後才離開 140.116.86.45 11/10 18:10
11F:→ lingpxs:但重點要注意function內有沒有共用變數 140.116.86.45 11/10 18:12
12F:推 sorryChen:如果用openMP 應該會更簡潔 68.123.226.150 12/05 05:55