具有类成员函数的线程分派模型

问题描述

我的代码包含以下头文件 dispatcher.hpp

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 (将#修改为@)