回调虚函数

Nic*_*ick 3 c++ multithreading callback

我正在使用嵌入式平台上的线程做一些工作.这个平台提供了一个Thread类,它有一个start带有函数指针的方法,如下所示:

void do_in_parallel() {
    // Some stuff to do in a new thread
}

Thread my_thread;
my_thread.start(do_in_parallel);
Run Code Online (Sandbox Code Playgroud)

问题是没有办法传递参数.1我想通过创建一个抽象类来调用它Thread2,调用它,扩展Thread(或者它可以只有一个Thread实例数据).

Thread2将有一个纯虚函数void run(),目标是将其传递给Thread::start(void*()),除了我很快就知道成员函数指针有不同的类型,不能像这样使用.我可以制作run()静态,但后来我仍然不能有多个实例,打败了整个目的(更不用说你不能拥有虚拟静态功能).

是否存在任何不涉及更改原始Thread类的变通方法(考虑到它是一个我原来坚持的库)?


1.在许多情况下,全局变量是一种可用的解决方法,除非从同一函数指针实例化多个线程.在这种情况下,我无法想出一种避免竞争条件的方法.

Yak*_*ont 6

编写一个全局线程池.

它维护着一个任务队列.这些任务可以具有状态.

在向队列添加任务时,您可以选择同时请求它立即获取线程.或者,您可以等待池中的线程完成它们正在执行的操作.

池中的线程由提供的Thread类创建,它们从池中获取其行进指令.在大多数情况下,他们应该弹出任务,执行它们,然后等待准备好的另一个任务.

如果不允许等待,您仍然可以拥有一些存储线程状态的全局线程管理器.

池/管理器返回相应的future<T>增强功能以​​及您想要的任何功能.提供任务的代码通过该对象而不是嵌入的Thread类型与任务交互.