私のプロジェクトにlibnetfilter_queueを使用しています。 From C appキューは "queue file descriptor"によってアクセス可能です。私はそれらを処理するために5つのキューと5つのスレッドを持っています。私が達成したいのは、キューに正確に2つのパケットがあるときにスレッドをスリープ状態にすることです。 select関数とintの配列を使って、各キューにどれくらいのパケットがキューに入っているかを示すアイディアを思いついた。私はどのキューがパケットを受信したかチェックし、値が2より大きければ、スレッドを起動します。すべてが問題ありませんが、recvを呼び出すまでキューにはデータがあり、別のスレッドがこれらのパケットを処理する必要があるため、キューを読むことができません。誰もがこの問題を解決する方法を知っていますか?私はSO_RCVLOWATを設定することができますが、私はその2つのパケットのサイズがわからないので、私の問題は解決しません。2パケットを受信した後にスレッドをスリープ状態にする方法
3
A
答えて
3
東武で推奨されているように、epollは良い選択であり、selectよりも優れています。 しかし、これらのポーリング機能のほとんどは、誰かが読んでいない限り、イベント(データが利用可能)があることを示します。 可能であれば、次のモデルを使用してください。 epoll/selectを使用して、着信データがワーカースレッドを起動するのを監視します。 実際に作業を行う前に、ワーカースレッドがデータ(1つのパケット、2つ以上)で何をすべきかを決定させます。
OR: 1つのリーダースレッド - Nワーカースレッド:すべての受信データを待機して読み込み、それを対応するワーカースレッドのキューにポストするためにepollを使用します。 パケットの数がしきい値に達すると、(セマフォを使用して)ワーカースレッドを起動します。
1
利用可能なデータの量が変更されたときに送信されるエッジトリガーイベント通知 - 通知を探しています。 epollは、EPOLLETフラグを使用するときのように機能し、デフォルトでは通知をリセットして、新しいパケットの通知を継続します。
2回のepoll_waitコールの間に複数のパケットが到着した場合は、一度だけ通知されます。
関連する問題
- 1. すべてのスレッドをスリープ状態にする方法 - iphone
- 2. Android、スレッドをスリープ状態にする方法は?
- 3. スリープ状態にあるQThreadをスリープ状態にしますか?
- 4. 競合状態をスレッド化し、スレッドをスリープ状態にするためにタイマを使用する
- 5. ランダムな量のMSのスレッドをスリープ状態にする
- 6. ディスプレイがスリープ状態にあるかどうかを確認するか、スリープ通知を受信する
- 7. ブロックとスリープ状態の消費者スレッド/
- 8. スレッドがスリープ状態にあるかどうかを調べる
- 9. デバイスがスリープ状態になった後にメインアクティビティをクリーンアップ
- 10. 画面をオフにする方法とデバイスをスリープ状態にする方法
- 11. Brainf_ckプログラムをスリープ状態にする方法は?
- 12. デバイスがスリープ状態になった後にANRを取得しました(Android)
- 13. スレッドの外側からスレッドをスリープ状態にする方法はありますか?
- 14. シェルスクリプトでスリープ状態にするには?
- 15. iOSアプリがWatch-WatchKitとの通信が1分後にスリープ状態になる
- 16. RxJavaスケジューラはスリープ状態のスレッドを変更しません
- 17. SSEイベントソースリスナーでスリープ状態のスレッドを目覚めさせる
- 18. iOSシミュレータでiPhoneをスリープ状態にする方法をシミュレートするには?
- 19. デバイスがスリープ状態になると起きる方法
- 20. 私のUIスレッドが正しくスリープ状態にならなかった
- 21. WindowsのRails 5 Pumaが20分後にスリープ状態になる
- 22. 私は明示的にスレッドをスリープ状態にしない限り、ソケットのsendTo()はパケットを送信しません。
- 23. Java/Android:到着時にパケットを受信している間にパケットを送信する方法
- 24. パケット送信/受信の処理方法
- 25. AngularFire2 - ページリフレッシュ後にログインした状態を維持する方法
- 26. Linuxカーネルでスリープ状態になる方法は?
- 27. スイフト2.2で数ミリ秒間スリープ状態になる方法は?
- 28. スレッドが終了するまでプログラムをスリープ状態にする方法はありますか?
- 29. Java Swing GUI - スレッドを常時スリープ状態にして、クリックで目を覚ます方法は?
- 30. スリープ状態から復帰した後のAndroidのアクティビティライフサイクル
なぜこのようなものが必要でしょうか? – jalf