gpt4 book ai didi

c++ - 如何在没有 Boost 的情况下将 C++ 成员函数作为线程执行?

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:51 25 4
gpt4 key购买 nike

我正在使用支持线程的小型嵌入式 RTOS。我正在用 C++ 编程,想创建一个类,允许我将任何类的任意成员函数作为线程运行。 RTOS 不直接支持从成员函数创建线程,但如果从线程中调用,它们可以正常工作。 Boost::thread 在我的平台上不可用。

我目前正在通过 friend thread_starter() 函数以临时方式启动线程,但似乎我必须为每个要从中运行线程的类设置一个单独的线程。我当前的线程基类解决方案使用虚拟 run() 函数,但这有一个缺点,即我只能为一个类启动 1 个线程,并且仅限于 run() 函数 + 依次调用的任何内容(即我不能从 run() 中优雅地运行任意函数)

理想情况下,我希望有一个模板化的“线程”类,这样我就可以在“X”类成员函数中执行以下操作:

class X 
{
run_as_thread(void* p)';
};

X x;
void* p = NULL;

template<X>
thread t(x, X::run_as_thread, p);

//somehow causing the following to be run as a thread :
x->run_as_thread(p);

很抱歉,如果这已经在这里完成,但我似乎只能找到有关使用 Boost::thread 来完成此操作的引用资料,但我无法找到。我也无权访问堆,因此所有全局变量都必须是静态的。

非常感谢,

迈克

最佳答案

如果您的编译器足够现代以支持 C++11 threading functionality然后你就可以使用它了。

也许是这样的:

class X
{
public:
void run(void *p);
};

X myX;
void *p = nullptr;

std::thread myThread(std::bind(&X::run, myX, p));

现在 X::run 将作为线程运行。当线程完成清理后调用 std::thread::join

关于c++ - 如何在没有 Boost 的情况下将 C++ 成员函数作为线程执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970026/

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