我使用了两个不同的异步事件库。一个在主线程中,一个在创建的线程中。我想从创建的线程中的主线程调用一个函数,但这会失败,因为创建的线程中的异步事件库永远不会返回。不幸的是,我必须使用另一个异步事件库,因为它是我用来实现该功能的库的一部分。
我的代码(非常简化)如下:
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()
。有没有人知道如何做到这一点,或一些更好的设计思路?
1条答案
按热度按时间izj3ouym1#
所以我决定采取一种不同的方法,看看我是否可以破解一些东西,这意味着在启动的线程中实现部分main_io逻辑。准确地说,main_io使用管道来传递事件。通过从main_io获取fd(管道的读取部分),并将该fd添加到已启动线程中的侦听部分,我能够获得警报并使事情运行。