如何将 std::thread 构造函数的目标函数作为参数传递

How to pass the target function of std::thread constructor as an argument

我可以这样做来开始我的话题:

int main_test() {
  // do something...
  return 0;
}

std::thread* myThread;

void myFunction() {
  myThread = new std::thread(main_test);
}

如何将 main_test 作为参数传递给 myFunction,以便可以使用相同的函数来启动使用不同目标函数的线程?那么 myFunction 的签名会是什么?

我想我不明白的是 std::thread 构造函数的模板版本是如何用指定类型调用的。

std::thread myThread;

myThread的类型是std::thread

myThread = new std::thread(main_test);

new std::thread(main_test)returnsstd::thread*。您不能将 std::thread* 分配给 std::thread。程序格式错误。

解决方案:似乎没有理由使用动态分配。只需像这样分配一个临时对象:

myThread = std::thread(main_test);

How do I pass main_test as an argument to myFunction, so the same function can be used to start the thread using different target functions? What would the identity of myFunction be then?

您可以使用与 std::thread 完全相同的参数使您的 myFunction 成为模板,然后转发所有内容。或者,如果您想保持简单,可以使用函数指针。

How do I pass main_test as an argument to myFunction, so the same function can be used to start the thread using different target functions?

您可以将指针作为参数传递给您的函数

void myFunction(int (*func)()) {
myThread = new std::thread(func);
}

int callSelector(int someCriteria)
{
    if (someCriteria == 0) {
        myFunction(main_test1);
    }
    else {
        myFunction(main_test2);
    }
}