例子:本應該執行30次,結果執行了9次就結束了
#include
#include
#include
"threadpool.hpp"
class
test
static
void
fun2()
};void
fun(
int i)
; std::this_thread::
sleep_for
(std::chrono::
milliseconds
(4000))
; std::cout <<
"task "
<< i <<
" working in thread "
<< std::this_thread::
get_id()
<< std::endl;
}int
main
(int argc,
char
* ar**)
std::cout <<
"結束執行緒"
解決辦法:
方法一:在迴圈體中或是迴圈體外加入等待時間,此時總的等待時間必須是大於執行緒函式總的處理時間,不好控制
#include
#include
#include
"threadpool.hpp"
class
test
static
void
fun2()
};void
fun(
int i)
; std::this_thread::
sleep_for
(std::chrono::
milliseconds
(4000))
; std::cout <<
"task "
<< i <<
" working in thread "
<< std::this_thread::
get_id()
<< std::endl;
}int
main
(int argc,
char
* ar**)
std::cout <<
"結束執行緒"
<<:endl>
return0;
}
方法二:在主函式的迴圈體外加入死迴圈,等待任務隊列為空,此時也會出現在某一時刻任務隊列為空,直接退出,所以需要加入雙層迴圈進行判斷。
#include
#include
#include
"threadpool.hpp"
class
test
static
void
fun2()
};void
fun(
int i)
; std::this_thread::
sleep_for
(std::chrono::
milliseconds
(4000))
; std::cout <<
"task "
<< i <<
" working in thread "
<< std::this_thread::
get_id()
<< std::endl;
}int
main
(int argc,
char
* ar**)
std::this_thread::
sleep_for
(std::chrono::
milliseconds(20
));while
(!threadpool.
isempty()
) std::cout <<
"結束執行緒"
方法三:使用條件變數使執行緒同步
Java等待多個執行緒執行完畢
1 使用join public class testcountdownlatch2 for int i 0 i 10 i for int i 0 i 10 i system.out.println main done class workthread implements runnable 2 使用...
執行緒同步 等待所有執行緒執行完畢
在多執行緒程式中經常會碰到執行緒同步 場景1主線程啟動多個子執行緒後,主線程需要等待所有的子執行緒執行完畢後,主線程才能進一步向下執行。c 提供了 manualresetevent 類為我們的執行緒同步提供了方便.manualresetevent.waitall new waithandle wai...
執行緒池迴圈執行
using system using system.collections.generic using system.linq using system.text using system.threading public class lockobj 正處理佇列 public queuequeuep...