gpt4 book ai didi

c++ - 虚函数的回调

转载 作者:太空狗 更新时间:2023-10-29 19:56:35 25 4
gpt4 key购买 nike

我正在嵌入式平台上做一些线程方面的工作。这个平台提供了一个Thread类,它有一个start方法接受一个函数指针,像这样:

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

Thread my_thread;
my_thread.start(do_in_parallel);

问题是没有办法传入参数。1 我想通过创建一个抽象类来解决这个问题,称之为Thread2,扩展 Thread(或者它可能只有一个 Thread 作为实例数据)。

Thread2 将有一个纯虚函数 void run(),目标是将其传递给 Thread::start(void*()),除了我很快了解到成员函数指针具有不同的类型并且不能像这样使用。我可以将 run() 设置为静态,但我仍然不能拥有多个实例,从而破坏了整个目的(更不用说你不能拥有虚拟静态函数)。

是否有任何不涉及更改原始 Thread 类的解决方法(考虑到它是一个我坚持使用的库)?


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

最佳答案

写一个全局线程池。

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

当你添加一个任务到队列中时,你可以选择同时请求它立即获得一个线程。或者您可以等待池中的线程完成它们正在做的事情。

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

如果不允许等待,您仍然可以使用一些全局线程管理器来存储线程的状态。

池/管理器返回相当于 future<T> 的值增加你想要的任何功能。提供任务的代码通过该对象而不是嵌入式 Thread 类型与任务交互。

关于c++ - 虚函数的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46356011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com