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

plupiseo  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(94)

我使用了两个不同的异步事件库。一个在主线程中,一个在创建的线程中。我想从创建的线程中的主线程调用一个函数,但这会失败,因为创建的线程中的异步事件库永远不会返回。不幸的是,我必须使用另一个异步事件库,因为它是我用来实现该功能的库的一部分。
我的代码(非常简化)如下:

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 Package 器),然后在创建的线程中执行init_x()。这个很好用。然后创建的线程进行一些初始化,并使用不同的框架(x_io_lib_loop_forever()) .当在创建的线程中设置好所有东西时,bla_x()被调用,它调用主进程中的一个函数,而主进程又想调用创建的线程(func_x())中的一个函数。
这就是它出错的地方,因为x_io_lib_loop_forever()永远不会返回,func_x()永远不会在创建的线程中执行。
因此,我正在寻找一种方法来暂停x_io_lib_loop_forever()并在该线程中执行func_x()。有没有人知道如何做到这一点,或一些更好的设计思路?

izj3ouym

izj3ouym1#

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

相关问题