まず。 thread1をlibstropheのイベントループ、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();
}
しかしlibstropheはスレッドセーフではありませんので、あなたが直接スレッド2から)(xmpp_send呼び出すことはできません(!)。代わりに、mutexでキューを保護することをお勧めします。したがって、上記の例は次のように変換されます。
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();
}
https://github.com/payden/libwebsockこれはlibwebsockライブラリのリンクです。 – tejasdadhe