我使用一个C库,该C库提供一个API来在该C库创建的线程中调用用户提供的函数。我无法处理回调内部的事件,因为它不应该阻塞线程,所以我想以某种方式通知Tokio事件循环已调用我的回调。
我该怎么做?
更确切地说,我有:
register_callback_to_run_inside_c_thread
我想在let (mut tx, rx) = watch::channel("hello");
register_callback_to_run_inside_c_thread(move || {
tx.broadcast("world").unwrap();
});
内传递闭包通知Tokio关于该事件。
首先我尝试:
RefCell
此代码无法编译,因为它在内部某处使用了lazy
。
我还尝试使用lazy
在Tokio中启动一个函数。该代码可以编译,但是在运行时崩溃,因为long dbInsert = dbHelper.addTableRecord(service, portNum, protocol, service);
应该在Tokio创建的线程内执行,而回调在C库创建的线程内运行。
有什么办法可以向Tokio通知该事件吗?