问题描述
struct Task {
int id;
int arg;
};
class dispatcher {
public:
// polls queue for new task
void listen(moodycamel::ReaderWriterQueue<Task>* dispatch_queue,std::map<int,Structure*> structure_map);
// calls structure_map[task.arg]->run()
void dispatch(Task task,Structure*> structure_map);
// returns a thread that runs the listen member function
std::thread listen_thread(moodycamel::ReaderWriterQueue<Task>* dispatch_queue,Structure*> structure_map);
};
它还包含文件 structure.hpp :
class Structure {
public:
// some member functions of void signature that run in while (true) loop
void run(); // creates a thread for each member function above
};
总而言之,dispatcher :: listen_thread函数是从main调用的。此函数轮询队列以查找Task对象的到达。收到任务后,dispatcher调用dispatcher :: dispatch,后者在structure_map中查找Structure对象指针,并尝试调用Structure :: run。如代码注释中所述,Structure :: run依次创建多个线程,这些线程运行Structure的各种成员函数。所有这些功能都是无效签名,并在“ while(true)”循环中运行。
“错误:没有匹配的函数调用std :: thread :: thread(,...”
我知道在创建运行某个类的成员函数的std :: thread时,应通过以下方式调用:
std::thread t(&foo::func,&foo,args...);
就我而言,我认为这可以减少为
std::thread t(structure_map[task.arg]::run,structure_map[task.arg],args...);
我不认为这是正确的语法,因为在尝试编译时出现语法错误。总而言之,我想创建一个线程,该线程运行一个类(Structure)的成员函数(Structure :: run),该成员函数是通过将int映射到类实例(structure_map)来访问的。请让我知道是否需要其他说明或代码。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)