C 强制其他线程在线程中执行函数

问题描述 投票:0回答:1

我正在使用 2 个不同的异步事件库。一个在主线程中,一个在创建的线程中。我想在创建的线程中从主线程调用函数,但是失败了,因为创建的线程中的异步事件库永远不会返回。不幸的是,我必须使用另一个异步事件库,因为它是我用来实现该功能的库的一部分。

我的代码(非常简化)如下:

voic bla_x()
{
    //this function is called when someone io stuff is done
    //is actually called from within x_io_lib_loop_forever()
    main_io_lib_call_func_in_main(callback_func_main_process);
}

void init_x()
{
    //setup things
    x_io_lib_loop_forever();
}

void callback_func_main_process()
{
    main_io_lib_call_func_in_threadX(func_x);
}

void start_threadX()
{
    main_io_lib_register_handler(init_x);
    main_io_lib_register_handler(func_x);
    main_io_lib_loop_forever();
}

int main()
{
pthread_create(start_thread());
main_io_lib_call_func_in_thread(init_x);
main_io_lib_loop_forever();
}

问题如下:我使用两个不同的事件库(这里称为 main_io 和 x_io)。我使用 main_io 创建一个线程(pthread 包装器),然后在创建的线程中执行

init_x() 
。这很好用。然后,创建的线程进行一些初始化,并使用不同的框架执行 io 操作(
x_io_lib_loop_forever())
。当创建的线程中的所有内容都设置完毕后,
 bla_x()
被调用,它调用主进程中的一个函数,而主进程又想要在创建的线程中调用函数(
func_x()
)。

这就是出错的地方,因为

x_io_lib_loop_forever()
永远不会返回,
func_x()
永远不会在创建的线程中执行。

因此,我正在寻找一种方法来暂停

x_io_lib_loop_forever()
并在该线程中执行
func_x()
。有谁知道如何做到这一点,或者一些更好的设计理念?

c multithreading pthreads
1个回答
0
投票

所以我决定采取不同的方法,看看是否可以破解一些东西,这意味着在启动的线程中实现部分 main_io 逻辑。准确地说,main_io 使用管道来传递事件。通过从 main_io 获取 fd(读取管道的一部分),并将该 fd 添加到启动线程中的监听部分,我能够收到警报并让事情运行。

© www.soinside.com 2019 - 2024. All rights reserved.