我可以這樣做來開始我的執行緒:
int main_test() {
// do something...
return 0;
}
std::thread* myThread;
void myFunction() {
myThread = new std::thread(main_test);
}
如何main_test作為引數傳遞給myFunction,以便可以使用相同的函式來啟動使用不同目標函式的執行緒?那么簽名會myFunction是什么?
我想我不明白的是如何std::thread使用指定型別呼叫建構式的模板化版本。
uj5u.com熱心網友回復:
std::thread myThread;
的型別myThread是std::thread。
myThread = new std::thread(main_test);
new std::thread(main_test)回傳std::thread*。您不能分配std::thread*到std::thread. 該程式格式錯誤。
解決方案:似乎沒有理由使用動態分配。只需像這樣分配一個臨時物件:
myThread = std::thread(main_test);
如何將 main_test 作為引數傳遞給 myFunction,以便可以使用相同的函式來啟動使用不同目標函式的執行緒?那么 myFunction 的身份是什么?
您可以myFunction使用完全相同的引數制作模板std::thread,并轉發所有內容。或者,如果您想保持簡單,可以使用函式指標。
uj5u.com熱心網友回復:
如何將 main_test 作為引數傳遞給 myFunction,以便可以使用相同的函式來啟動使用不同目標函式的執行緒?
您可以將指標作為引數傳遞給您的函式
void myFunction(int (*func)()) {
myThread = new std::thread(func);
}
int callSelector(int someCriteria)
{
if (someCriteria == 0) {
myFunction(main_test1);
}
else {
myFunction(main_test2);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364334.html
