gpt4 book ai didi

c - 如何合并来自不同项目的事件循环

转载 作者:行者123 更新时间:2023-11-30 15:09:32 24 4
gpt4 key购买 nike

我正在使用 Strope C 库进行 XMPP 消息传递,并使用 libwebsock 创建 Websocket 服务器。我想要做的是将 strope 上收到的消息转发到 Websocket 客户端,反之亦然。但是我不知道该怎么做。

此外,strope 和 libwebsock 都需要运行事件循环来处理事件。如何运行这两个循环或将它们合并为一个循环,以便在同一程序中处理来自两个库的事件?

提前致谢。 :)

最佳答案

首先您需要创建 2 个线程。分别令 thread1 为 libstrope 的事件循环,thread2 为 libwebsock 的事件循环。总体思路可以用下面的伪代码来描述:

xmpp_message_callback() {
libwebsock_send_text();
}

thread1() {
xmpp_run();
}

libwebsock_message_callback() {
xmpp_send();
}

thread2() {
libwebsock_wait();
}

main() {
init_libstrophe()
init_libwebsock();
create_thread1();
create_thread2();
join_thread1();
join_thread2();
}

但是(!)因为 libstropice 不是线程安全的,所以你不能直接从 thread2 调用 xmpp_send() 。相反,我建议使用互斥锁来保护队列。所以,上面的例子就转化为:

list  queue;
mutex queue_lock;

xmpp_message_callback() {
libwebsock_send_text();
}

thread1() {
while {
xmpp_run_once();
mutex_lock(queue_lock);
while (queue is not empty) {
stanza = list_pop_front(queue);
xmpp_send(stanza);
}
mutex_unlock(queue_lock);
}
}

libwebsock_message_callback() {
mutex_lock(queue_lock);
list_push(queue, stanza);
mutex_unlock(queue_lock);
}

thread2() {
libwebsock_wait();
}

关于c - 如何合并来自不同项目的事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com