サーバーソケットを作成したいが、 "accept call"でメインアプリケーションをブロックしたくない。だから私はメインアプリケーションでソケットを作成します。 pthreadメカニズムを使用して、私はそれに "accept call"を使用する新しいスレッドを作成しました。メインアプリケーションにソケットを作成した後、私は「pthread join」と呼ばれました。このスレッドが実行されると、 "accept call"が再びメインアプリケーションをブロックします。私はgdbを使ってチェックしました。この問題についてどうすればいいのですか?新しいスレッドのサーバーソケット
答えて
メインサーバのソケットディスクリプタをノンブロッキングにしてselect system callを使用する方法もあります。 selectが返ってメインソケットディスクリプタにデータがある場合は、新たに受け入れられた接続を処理するための新しいスレッドを作成します。このようにして並列性を達成することができます。作成された新しい接続には独自のコンテキストがあり、accept()が接続を待つ間も可能な限りスケジュールされます。
accept()ループでselect()を使用しても意味がありません。何も得られず、システムコールを余分に行う必要があります。あなたはselect()がブロッキングコールであることを理解していますか? –
@Naresh。 Martin Jamesが述べたように、選択コールはブロックされています。したがって、メインアプリケーションはブロックされます。私は、メインアプリケーションがブロックしてはならないシナリオを持っています。クライアントがいつ接続するのかわかりません。 –
- 1. 私はなぜ新しいスレッド(新しいスレッド()、 "文字列"); '
- 2. AsyncTask内の新しいスレッド
- 3. アンドロイド:新しいスレッドのNetworkOnMainThreadException?
- 4. 新しいスレッド(Runnable runnableObj)対。拡張スレッド
- 5. Windows Phone上のサーバーソケット
- 6. 既存のスレッドは、新しいスレッドを使用して新しいスレッドを作成します()。)(開始
- 7. "新しいスレッド"は新しいスレッドを開始しませんか?
- 8. 新しいスレッドはまだUIスレッドをブロックしています
- 9. 別のスレッドの新しいフォーム
- 10. スレッドと匿名メソッドの代理人 - 新しいスレッドのコントロールを更新する
- 11. Javaのスレッド:古いスレッドにJavaスレッドへの新規の
- 12. Cでノンブロッキングのクライアントとサーバーソケット
- 13. 新しいスレッド内のC#タイマー
- 14. C#の - 教え新しいスレッド
- 15. 新しいスレッドからのスプリングブートログランタイム例外
- 16. どのスレッドが新しいスレッドを '親'と見なすか
- 17. iOSの現在のスレッドに新しいスレッドと新しいコメントを投稿する方法
- 18. 理解非同期は/新しいスレッドを作成していないスレッド
- 19. スレッドから新しいスレッドを開始する
- 20. 新しいスレッドを複数回
- 21. window.open強制的に新しいJavaScriptスレッド
- 22. 新しいスレッドにマーカーをドロップする
- 23. Tomcatで新しいスレッドを開く
- 24. スレッド内で新しいアクティビティを開始
- 25. 新しいスレッド()およびガベージコレクション
- 26. 新しいスレッドでJavaコールバックを実行
- 27. 新しいスレッドまたはAsyncTask?
- 28. 新しいスレッドを作成する - Android
- 29. 新しいスレッドでXMLファイルを開く?
- 30. 新しいスレッドにJavaクラスメソッドを追加
"pthread_join()関数は、ターゲットスレッドが終了するまで、呼び出しスレッドの実行を中断します。"つまり、新しいスレッドが新しい呼び出しを引き続きリッスンするため、メインスレッドをブロックします。詳細については、ここをクリックしてください:[pthread_join](http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.html) – Floaterz
それで、pthread_join()を呼び出さずに私のために働くのですか? –
Protip - 選択肢がない限り、pthread_joinを呼び出しません。あなたのケースでは、受け入れループは、今まで必要はありません。 –