問題タブ [boost-thread]

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.

0 投票する
4 に答える
15746 参照

c++ - Boost Signals2 と Threads を使用して、C++ でソフトウェア ウォッチドッグ タイマー スレッドを作成できますか?

現在、シングルスレッドアプリケーションで他の誰かのライブラリから関数 Foo を実行しています。ほとんどの場合、私は Foo を呼び出しますが、それは非常に迅速です。時には、Foo を呼び出すと、永遠に時間がかかります。私は忍耐強い人ではありません.Fooが永遠にかかる場合は、Fooの実行を停止し、それらの引数で呼び出したくありません.

特定の秒数後に実行を停止できるように、制御された方法 (現在の環境は POSIX/C++) で Foo を呼び出す最良の方法は何ですか。ここで行うべき正しいことは、Foo を呼び出す 2 番目のスレッドを作成することだと思いますが、メイン スレッドでは、時間切れになった場合に最終的に 2 番目のスレッドに通知するタイマー関数を作成します。

別のより適切なモデル (およびソリューション) はありますか? そうでない場合、Boost の Signals2 ライブラリと Threads でうまくいくでしょうか?

0 投票する
2 に答える
3427 参照

c++ - ブーストスレッドキャンセル

pthread と同じように Boost Thread をキャンセルできますか?

ワーカー スレッドがクラッシュした場合にワーカー スレッドを終了するための簡単なウォッチドッグを作成していますが、Boost Thread ライブラリのスレッドを単純にキャンセルする方法がないようです。

0 投票する
1 に答える
245 参照

c++ - Metrowerks コンパイラで boost.thread コンパイル エラーを解決する

metrowerks codewarrior 5.5.3 で boost.thread を使用しようとしています。ヘッダー thread.hpp で、彼が thread::thread_data: を再定義しているというエラーが表示されます。

実際、thread::thread_data が 2 回宣言されているように見えます。そこではどの C++ 機能が使用されていますか? そのコンパイラの欠陥をどのように克服できますか?

0 投票する
1 に答える
1417 参照

c++ - MSVC言語拡張機能を無効にしてBoost.Threadヘッダーを使用する

MSVCで言語拡張機能が無効になっている場合、次のものを含めようとすると、このエラーが発生することがわかりましたboost/thread/thread.hpp

致命的なエラーC1189:#error: "スレッドサポートが利用できません:"で明示的に無効にされていBOOST_DISABLE_THREADSます

Boostが言語拡張機能が無効になっている(_MSC_EXTENSIONS定義されていない)ことを検出すると、を定義BOOST_DISABLE_WIN32して、含めるのが安全ではないことを示しているようですwindows.h(拡張機能が有効になっていないとコンパイルされません)。

そして、その#defineの結果としてBOOST_DISABLE_THREADS、Boost.Threadはヘッダーのみのライブラリでwindows.hはなく、.cppファイルにのみ含まれているにもかかわらず、が定義されます。ヘッダーは、原則として、言語拡張なしで安全に使用できる必要があります。実際のwin32呼び出しはすべて、コンパイルされたライブラリ(.dllまたは.lib)に分離されています。

ここでは、彼らが問題を認識していることがわかりますが、過去2年間は手つかずのままであるため、迅速な修正を期待するのはおそらくナイーブです。

#ifdefいくつかの'とさまざまなBoost構成ファイルを変更するのはかなり単純なケースの#definesようですが、それらはたくさんあり、目的が明確でない多くのマクロを定義して使用しています。 。

言語拡張機能が無効になっているときにBoost.Threadヘッダーを含めることができるようにするための簡単なハックまたは回避策を知っている人はいますか?

0 投票する
4 に答える
32649 参照

c++ - (単純な)スレッドグループの質問を後押しする

かなり単純なスレッド化されたアプリケーションを作成しようとしていますが、boost のスレッド ライブラリは初めてです。私が取り組んでいる簡単なテストプログラムは次のとおりです。

ただし、このプログラムをコンパイルして実行すると、次の出力が得られます

明らかに、結果は正しいのですが、特に、本質的に同じ構造を持つ実際のプログラムが join_all() ポイントでスタックしているため、このエラー メッセージが心配です。誰かが私に何が起こっているのか説明できますか? これを行うためのより良い方法はありますか?つまり、多数のスレッドを起動し、それらを外部コンテナに保存し、プログラムを続行する前にすべてのスレッドが完了するのを待ちますか?

ご協力いただきありがとうございます。

0 投票する
1 に答える
2029 参照

c++ - boost.threadのデッドロックと自己削除

スレッドのboost::thread_group作成(使用 )とディスパッチに使用しています。thread_group::create_thread()最大スレッド数を制限するために、各スレッドの最後で、からスレッドthread_groupを削除し、スレッド自体を削除します(新しいスレッドを作成する必要があるかどうかを判断できるようにするため)。ただし、最後のスレッドの作成と削除の間のどこかでハングします(たとえば、合計999の999番目のスレッド)。

私の質問は次のとおりです。

  • 私のようにスレッド自体からスレッドを削除しても大丈夫ですか?そうでない場合、これを達成するための最良の方法は何ですか
  • コードがハングするのはなぜですか?

関連するコードは次のとおりです。

//1-スレッドを作成してディスパッチするコード

//2-スレッド実行のコード

//3-スレッド自体を削除するコード

0 投票する
3 に答える
3955 参照

c++ - C、C++、C++0x、pthread、boost のスレッド

C/C++ のスレッドに関する質問...

C++0x 構文

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? this_thread::yield()メインで呼んでもいいですか?this_thread::get_id()そして、メインで呼び出すと何が得られますか?

pthread 構文

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? pthread_yield()メインで呼んでもいいですか?pthread_self()そして、メインで呼び出すと何が得られますか?

ブースト構文

スレッドはいくつありますか? 2 つ (x と y) または 3 つ (x、y とメイン)? boost::this_thread::yield()メインで呼んでもいいですか?boost::this_thread::get_id()そして、メインで呼び出すと何が得られますか?

0 投票する
2 に答える
717 参照

c++ - microsec_time_clock.hpp警告をブーストしますC4244

私はブーストを使うのが初めてで、問題があります。プロジェクトにshared_mutex関数が必要です。だから私はやった

そして私のプロジェクトをコンパイルしました。「警告をエラーとして扱う」を含む私のMSVC2005は、警告のためにコンパイルを停止します。

c:\\...\microsec_time_clock.hpp(103) : warning C4244: 'argument' : conversion from 'int' to 'unsigned short', possible loss of data

shared_mutexにマイクロ秒関数が必要な理由はわかりませんが(boostライブラリにはかなり大きな依存関係リストがあるので読んだことがあります)、プロジェクトをコンパイルできません。私は少しググって、同じ問題を見つけましたが、決定はありません。

更新:現在、boostをコンパイルしていますが、boost.thread.shared_mutexを含むすべてのソースをオープンソースプロジェクトに配置したいと思います。

0 投票する
6 に答える
7728 参照

c++ - スレッドローカルストレージはどのプラットフォームで制限されており、どのくらい利用できますか?

最近、一部のプラットフォームでスレッドローカルストレージが制限されていることに気づきました。たとえば、C++ライブラリのブースト::スレッドのドキュメントは次のとおりです。

「注:作成できるスレッド固有のストレージオブジェクトの数には実装固有の制限があり、この制限は小さい場合があります。」

さまざまなプラットフォームの制限を見つけようと探していましたが、信頼できるテーブルを見つけることができませんでした。TLSを使用するクロスプラットフォームアプリを作成している場合、これは重要な質問です。Linuxは、2002年にIngo MonarがTLSサポートを追加するカーネルリストに送信したパッチの形で情報を見つけた唯一のプラットフォームでした。彼は次のように述べています。「TLS領域の数は無制限であり、関連する追加の割り当てオーバーヘッドはありません。 TLSサポート付き。」2009年にまだ真実である場合(そうですか?)、かなり気の利いたものです。

しかし、今日のLinuxはどうですか?OS X?ウィンドウズ?Solaris?組み込みOS?複数のアーキテクチャで実行されるOSの場合、アーキテクチャによって異なりますか?

編集:なぜ制限があるのか​​知りたい場合は、スレッドローカルストレージ用のスペースが事前に割り当てられることを考慮してください。そのため、すべてのスレッドでそのコストを支払うことになります。たくさんのスレッドに直面して少量でも問題になる可能性があります。