問題タブ [stdthread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C ++ 11 std :: threadエラーが発生しました:std :: thread::threadを呼び出すための一致する関数がありません
このコードでc++11スレッドをテストしていますが、スレッドを作成するときに、「std :: thread :: thread()」の呼び出しに一致する関数がないというエラーが発生します。
std :: thread ctrに与えている関数に何か問題があったかのようですが、それがどのように間違っているのかわかりません。それは不完全ですが、私には正しく見えます:
ヘッダ:
ソース:
c++ - 2 つの同一の (ネットワーク) 通話。最速を待ち、最も遅く破棄する方法は?
c++11 では、同じタイプの 2 つの高価な (ネットワーク) 呼び出しを実行し、遅い方の結果を待って破棄するのではなく、速い方の結果のみを待つプログラムを実装するにはどうすればよいでしょうか。std::thread は中断できず、便利な std::future を返しません。また、未来を返す std::async は、中断することも切り離すこともできません。
2 つの主な問題は次のとおりです。 - より迅速な結果が到着したときの通知。- 遅いスレッドの終了 (およびクリーンアップ)。
c++ - asio .async_* は、メイン スレッドが io_service.run を呼び出さない限り実行されません
私は最近、boost asio といくつかの新しい c++11 コンストラクトをいじっています。これは、予期しない動作を引き起こすコードのサンプル セクションです (少なくとも私にとっては)。
Server::startAccept を呼び出す前に、io_service::work のインスタンスと、io_service_.run() を呼び出す std::thread のプールを作成しました。startAccept を呼び出した後、メイン スレッドはコマンド ライン入力を待つだけです。
スレッド プール内のスレッドの 1 つが、接続の開始時に Server::accept_handler を実行することを期待しています。これは起こりません。代わりに、メイン スレッドから io_service_.run() を呼び出す必要があります。
しばらく遊んでみたところ、これを行うことで目的の動作を実現できることがわかりました。
.async_* 操作と io_service.post の違いは何ですか?
編集: BOOST_ASIO_ENABLE_HANDLER_TRACKING の定義
プログラムをコンパイルして実行し、最初に含めたコード ブロックを使用してサーバーに接続すると、次のような出力が表示されます。
含めた 2 番目のコード ブロックを実行してサーバーに接続すると、次の出力が得られます。
編集 2: スレッド作成の洞察
c++ - std::thread, class constructor and destructor
When testing threads in C++11 I have created the following example:
Which prints the following:
Why is the destructor called 6 times for the thread? And why does the thread report different memory locations?
EDIT When adding move and copy constructor output:
c++ - C ++ 11:std :: thread pooled?
C ++ 03では、常に2つのスレッドを実行し続ける自己構築スレッドプールでpthreadを使用しました(pthread_create
遅いため)。このようにして、パフォーマンスの問題を気にせずに小さなタスクのスレッドを起動できました。
現在、C++11にはがありstd::thread
ます。標準は特定の実装について何も述べていないので、私の質問は標準ライブラリの実装についてです。std::thread
彼らは一般的に、 sの構築が安価である(そして例えばpthread_create
posixを必要としない)プールされたアプローチを選択していますか、それともstd::thread
単なるラッパーになりますか?
言い換えれば、スレッドプールはC ++ 11でも推奨されていますか、それとも必要std::thread
なときにいつでもスレッドプールを作成して、パフォーマンスを標準ライブラリに任せる必要がありますか?
c++ - native_handle() + pthread_cancel() を使用して std::thread をキャンセルする
pthread の以前のスレッド ラッパーを std::thread に変換しています。ただし、c++11 にはスレッドをキャンセルする方法がありません。ただし、スレッドは外部ライブラリ内で非常に長いタスクを実行している可能性があるため、スレッドをキャンセルする必要があります。
プラットフォームで pthread_id を提供する native_handle の使用を検討していました。Linux (Ubuntu 12.10) で gcc 4.7 を使用しています。アイデアは次のようになります。
スレッドは、pthreads によってスローされた例外によってキャンセルされます。
私の質問は:
このアプローチに問題はありますか (移植性がないこと以外に)?
c++ - std :: lock(c ++ 11)を使用した大量のCPU負荷
スレッド/ミューテックスマネージャーを実装するための最近の取り組みは、75%のCPU負荷(4コア)になりましたが、実行中の4つのスレッドはすべてスリープ状態か、ミューテックスビーのロックが解除されるのを待っていました。
特定のクラスは、ここに完全に掲載するには大きすぎますが、原因を2つのミューテックスのデッドロックセーフな取得に絞り込むことができます。
クラスの別の部分では、std::condition_variable
withwait()
とnotify_one()
onmutex1
を使用して、一部のコードを同時に選択的に実行します。
への簡単な変更
CPU使用率を通常の1〜2%に下げました。
私は信じられません、std::lock()
機能はその非効率的です。これはg++4.6.3のバグでしょうか?
編集:(例)
c++ - std::スレッドエラー
クラス内からスレッドを生成しようとしていますが、スレッドはクラス内の特定のメソッドを実行します。コードは次のようになります。
コンパイル時のこのコードは、次のエラーをスローします
ここでの実際のバグが何であるかはわかりません。誰かがこれで私を助けることができますか?
ありがとう。