2016-04-14 9 views
0

からループします。しかし、私はこれを行う方法を知らない。ホーマージするイベントは、前方、その逆のWebSocketクライアントへの詩句に受け取ったとのメッセージである私がやりたいのWebSocket server.Whatを作成するために、XMPPメッセージングおよびlibwebsockのため、私は詩句Cライブラリを使用しています異なるプロジェクト

また詩句とlibwebsock両方のイベントがイベントを処理するためにループを実行する必要があります。同じプログラム内の両方のライブラリからのイベントを処理するために、両方のループを実行したり、それらを1つにすることはできますか?

ありがとうございます。あなたは2つのスレッドを作成するために必要なすべての:)

+1

https://github.com/payden/libwebsockこれはlibwebsockライブラリのリンクです。 – tejasdadhe

答えて

0

まず。 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(); 
} 
+0

ありがとうございます。 :)あなたの解決策を試し、すぐにあなたに戻ってきます! – tejasdadhe

+0

テストと設定の方法で相互排除を達成するためにここでmutexロックを使用しています。私は正しいですか? – tejasdadhe

+0

ところで、ありがとうトン!それは魅力のように働いています。 – tejasdadhe

関連する問題