問題タブ [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 投票する
2 に答える
11137 参照

c++ - ブーストスレッドに名前を付けますか?

boost::threadデバッガーテーブルとクラッシュログを読みやすくするために、に名前を付けることはできますか?どのように?

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

c++ - boost::thread_group で一定数の並列スレッドを実行する方法

これは、thread_group を作成し、すべてのスレッドを並行して実行するコードです。

このコードは、すべてのスレッドを一度に実行します。私がやりたいことは、最大4つを除くすべてを並行して実行することです。on が終了すると、実行するものがなくなるまで別のものが実行されます。

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

boost-thread - boost::thread とそれらのプールの作成!

boost::thread クラスには、「非スレッド」を与えるデフォルトのコンストラクターがあります。

boost::thread t1;

良い?コードの後半で実行する関数を指定できますか?

そして別の質問:

段階的なアーキテクチャ (SEDA) を持つ小さなサーバーを作成しようとしています。各段階には多数のワーカー スレッドがあり、段階はイベント キューに接続されています。次のようにboost::thread_groupを使用して4つのワーカースレッドでプールを作成すると:(ここでクリーンアップするためにキューの条件変数を削除しました。また、キューのサイズが常に4Nであると仮定しています。)

thread_group はサイズが大きくなり続けます。終了したグループ内のスレッドはどうなりますか?また、これらのスレッドを再利用して、thread_group のサイズを 4 に保つにはどうすればよいですか?

私はこの質問を見て、上記のコードの代わりにこれを使用しました:

違いは何ですか?どちらがより良いパフォーマンスを持っていますか?メモリリークは発生しますか?または、スレッドの単純なプールを作成する別の方法はありますか?

助けていただければ幸いです。どうもありがとうございました。

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

mfc - BOOST 1.35 を 1.43 にアップグレードすると、__pRawDllMain (mfc 関連) でリンカー エラーが発生する

職場では、1.35 で正常にビルドされた MFC 拡張 DLL がありますが、1.43 でビルドすると次のエラーが発生します。

BOOST_LIB_DIAGNOSTIC を有効にすると、古いビルド リストが表示されます。

したがって、リンクされているライブラリに変更はありません

完全なエラー メッセージは次のとおりです。

両方のライブラリ バージョンで tss_pe.cpp の diff を実行しましたが、それらは同一であるため、何が問題なのかわかりません。

定義することでメッセージを消すことができますが、BOOST_THREAD_USE_DLLBOOST_THREAD-VC71-MT-GD-1_43.DLL を出荷する必要があるため、これが最善の解決策ではないと思います。

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

shared-ptr - shared_ptrアサーションpx!=0が失敗しました

かなり複雑なマルチスレッドアプリケーション(サーバー)があり、アサートが原因でクラッシュすることがあります。

原因を特定できず、これがboost :: shared_ptrの問題なのか、それとも私なのか疑問に思っていました。

g ++4.4.3-4ubuntu5とllvm-g++(GCC)4.2.1を最適化あり、最適化なし、libboost1.40-dev(= 1.40.0-4ubuntu4)で試しました。

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

boost - 複数の Boost.Thread インスタンスは C++ アプリケーションで問題ありませんか?

Boost.Threads を DLL (具体的には Mac OS X フレームワーク) として使用するプラグイン アーキテクチャを持つアプリケーションがあります。Boost.Threads も使用するプラグインを作成しようとしており、ライブラリに静的にリンクしたいと考えています。すべて正常にビルドされますが、プラグインの Boost.Threads コードの奥深くで、アプリケーションがすぐにクラッシュします。Boost.Threads の DLL バージョンにリンクすると問題が解決するようですが、プラグインを自己完結型にしたいと考えています。

このようなセットアップで Boost.Threads の 2 つのインスタンスを使用することは可能ですか (1 つは DLL として、もう 1 つは別の DLL に静的にリンクされています)。もしそうなら、2つのインスタンスをうまくやっていくために何が欠けているのでしょうか?

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

c++ - ブースト スレッドがクラスのメンバー関数として作成されたときに切り離されない

私のコードの簡略版は次のようになります。

このプログラムは、スレッドで detach メソッドを呼び出しても、スレッドの実行が完了するのを待ってから終了します。クラスを削除して、関数内だけでスレッドを作成すると、これは期待どおりに機能するようです。

オブジェクトがまだメモリに残っていることに関係があると思います。ただし、私は C++ の学習者であり、これを解決する方法がわかりません。

0 投票する
7 に答える
55940 参照

c++ - ブースト スレッド エラー: 未定義の参照

このプログラムをコンパイルしようとしたところ、次のエラーが発生しました。

なぜこのエラーが発生するのか教えてもらえますか?

0 投票する
5 に答える
418 参照

c++ - Boost スレッドを並列ではなくシリアルに実行するにはどうすればよいですか?

Boost スレッドを使用して計算を高速化するコードがありますが、デバッグする必要があり、並列ではなく直列に実行したいと考えています。それ、どうやったら出来るの?

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

c++ - フレンド関数が構造体の一部として定義されるのはなぜですか?boost thread_data?

私はPC-Lintの悲しみを引き起こしているブーストコードを理解しようとしていますが、合法的なC ++とは思わなかったが、VS2008では正常にコンパイルされる方法でfriendキーワードを使用しています。

クラスや関数を宣言する方法として友達を理解したと思いました。このような関数定義で使用することは合法だとは思いませんでした。ただし、MSDNページは非常に具体的です。

フレンド関数は、クラス宣言内で定義できます。これらの関数はインライン関数であり、メンバーのインライン関数と同様に、すべてのクラスメンバーが表示された直後で、クラススコープが閉じられる前(クラス宣言の終わり)に定義されたかのように動作します。

クラス宣言内で定義されたフレンド関数は、それを囲むクラスのスコープでは考慮されません。それらはファイルスコープにあります。

ですから、私はそれが異常な構文であるとしても合法であることを理解しています。

友達が何かを宣言する通常の理由は、アクセスを増やすことであるため、何が得られるのかわかりません。ただし、構造体のメンバーはデフォルトですべて公開されているため、ここではそのような利点はありません。

私は何か深遠なものを見逃していますか、それとも誰かが構造体の本体の後にインラインフリー関数を置くのが好きではないというスタイル上のブーストの問題ですか?

_InterlockedIncrementはWin32の組み込み関数であることに注意してください。

アップデート

以下のChubsdadの回答のおかげで、私は今それを理解していると思います。何が起こっているのかについての私の要約です。

  • 彼らはこれらが無料の関数のように振る舞うことを望んでいるので、あなたはただコンパイルすることができますintrusive_ptr_add_ref(somePtrToThreadData)
  • それらが構造体の後に定義されたフリー関数である場合、それらはグローバル名前空間に表示されます
  • フレンド修飾子を使用して構造体内に配置すると、構造体内でスコープが設定されますが、メンバー関数ではないため、静的関数のように動作します。
  • 引数依存のルックアップは、それらがフリー関数であるかのように使用されたときに検出されることを意味します
    • 上記の組み合わせは、それらが自由関数構文を使用する仮想関数であるかのように動作することを意味します(明示的なデータブロックを呼び出されるのではなく、パラメーターとして取得します)