libevent 是否允许在不同的线程中 运行 回调 timer/io?
Does libevent allow to run callback for timer/io in a different thread?
由于某些应用程序原因,我需要 运行 在不同线程中回调 timer/io 事件。
示例:
void EventLoop::createIOEvent(int fd, short kind, event_cb originalCallback, void* originalUserData)
{
...
const auto data{std::make_shared<UserData>(originalUserData, originalCallback, callbackExecutor)};
event* event{event_new(_eventBase, fd, kind, EventLoop::asyncCall, data.get())};
event_add(event, nullptr);
...
}
void EventLoop::asyncCall(int fd, short kind, void* data)
{
const auto userData{*(reinterpret_cast<UserData*>(data))};
ExecutorWrapper(userData._callbackExecutor)
.addRunnable([=]() {
userData._originalCallback(fd, kind, userData._originalUserData);
})
.exec();
}
libevent 使用这种方法是否合法?
注意:似乎在 Mac 和 iOS 上一切正常,但在 Android 上我的测试应用程序无故关闭。
Is it legal for libevent to use such approach?
因此可以从多个线程访问 event/event_base,在这种情况下,您需要为 libevent 启用线程支持:
evthread_use_pthreads(); // or similar
然后使用 BEV_OPT_THREADSAFE
实现 bufferevent
线程安全。
有关详细信息,请查看 in the book。
即使您的方法在修改后应该有效,但这也不是一个好的设计选择。创建事件工作者(单独的 event_base
+ 线程)并在后台线程的 event_base
中安排事件 (event_add
) 会更好。
Android my test application just closes without any reasons.
需要详细信息。
由于某些应用程序原因,我需要 运行 在不同线程中回调 timer/io 事件。
示例:
void EventLoop::createIOEvent(int fd, short kind, event_cb originalCallback, void* originalUserData)
{
...
const auto data{std::make_shared<UserData>(originalUserData, originalCallback, callbackExecutor)};
event* event{event_new(_eventBase, fd, kind, EventLoop::asyncCall, data.get())};
event_add(event, nullptr);
...
}
void EventLoop::asyncCall(int fd, short kind, void* data)
{
const auto userData{*(reinterpret_cast<UserData*>(data))};
ExecutorWrapper(userData._callbackExecutor)
.addRunnable([=]() {
userData._originalCallback(fd, kind, userData._originalUserData);
})
.exec();
}
libevent 使用这种方法是否合法?
注意:似乎在 Mac 和 iOS 上一切正常,但在 Android 上我的测试应用程序无故关闭。
Is it legal for libevent to use such approach?
因此可以从多个线程访问 event/event_base,在这种情况下,您需要为 libevent 启用线程支持:
evthread_use_pthreads(); // or similar
然后使用 BEV_OPT_THREADSAFE
实现 bufferevent
线程安全。
有关详细信息,请查看 in the book。
即使您的方法在修改后应该有效,但这也不是一个好的设计选择。创建事件工作者(单独的 event_base
+ 线程)并在后台线程的 event_base
中安排事件 (event_add
) 会更好。
Android my test application just closes without any reasons.
需要详细信息。