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

c++ - Boost.ThreadはVS2010でbad_alloc例外をスローします

含める<boost/thread.hpp>と、この例外が発生します。

私はそれをキャッチできません、メモリの場所で壊すとkernel32.dllに移動し、この時点で何が起こっているのかわかりませんが、プログラムが終了した後に例外がスローされ、VSがそれをキャッチできるようです。

テストケース:

コンパイラのコマンドライン:
/I"I:\SophisPal\boost-1_43_0-vc10-32\include\boost-1_43" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\Client.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue

リンカーコマンドライン:
/OUT:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.exe" /INCREMENTAL:NO /NOLOGO "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_system-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_date_time-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_regex-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_thread-vc100-mt-1_43.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Release\Client.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /PGD:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

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

c++ - スレッドは、終了時にどのようにシグナルを送ることができますか?

上記のプログラムの出力はなぜですか?

始めて..
かっこいい、走っている。
4つのdostuffを開始
するdostuffは、
まだ実行中のものを実行して実行されますか?どうして

それが行われたときに、どうすればdostuffは正しくフラグを立てることができますか?私はそれを待っているのではなく、それが終わったときに通知を受けたいだけです。

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

c++ - 信号とスレッド-設計の決定は良いか悪いか?

非常に計算量の多い計算を実行するプログラムを作成する必要があります。プログラムは数日間実行される場合があります。計算は、共有データを必要とせずに、さまざまなスレッドで簡単に分離できます。現在のステータスを通知するGUIまたはWebサービスが必要です。

私の現在の設計では、BOOST::signals2とBOOST::threadを使用しています。コンパイルされ、これまでのところ期待どおりに機能します。スレッドが1回の反復を終了し、新しいデータが利用可能な場合、GUIクラスのスロットに接続されているシグナルを呼び出します。

私の質問:

  • この信号とスレッドの組み合わせは賢明なアイデアですか?私は別のフォーラムで、誰かが「この道を進んで」はいけないと誰かにアドバイスしました。
  • 私が見落とした潜在的な致命的な落とし穴が近くにありますか?
  • GUIクラスを使用してWebインターフェイスやQT、VTKなどのウィンドウを提供するのが「簡単」になるという私の期待は現実的ですか?
  • 私が見落としていた(他のブーストライブラリのような)より賢い代替手段はありますか?

次のコードはでコンパイルされます

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

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

ubuntu - Boost.Threadのリンク-boost_threadとboost_thread-mt

Boost.Thread1.34.1ライブラリにどのようなリンクオプションが存在するかは私にはわかりません。私はUbuntu8.04を使用しており、コンパイルと実行の両方を使用しているとき、boost_threadまたはboost_thread-mtリンクしているときに、これらまたは他のリンクオプションに関するドキュメントが上記のリンクに表示されないことがわかりました。

どのようなBoost.Threadリンクオプションが利用可能であり、それらはどういう意味ですか?

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

c++ - boost::threads - 正常なシャットダウンを行う方法は?

Win32 スレッドに対する独自のラッパーの代わりに boost:threads を使用して、C++ アプリの移植性を改善しようとしていますが、正常なスレッド終了の問題が (再び) 頭を悩ませています。

純粋な win32 では、こちら で説明されているように、 QueueUserAPCを使用して「thread_interrupt」例外をスローし、すべての RAII オブジェクトが途中でクリーンアップされるようにすることで、スレッドを「中断」します。「アラート可能な」OS 機能はすべてこの方法で中断される可能性があるため、ミューテックスの待機、スリープ、シリアルおよびソケット I/O などはすべて中断ポイントとなる可能性があります。

ただし、boost:mutex などは、win32 の QueueUserAPC によって「アラート可能」ではありません。SleepEx(n, true) ではなく、Sleep(n) のようなものを呼び出します)。

ブーストスレッドには「割り込み」メカニズム (同様に例外のスローが含まれます) がありますが、boost::thread 呼び出しのみが割り込み可能なため、サードパーティのソケットライブラリ (たとえば) は割り込みできないという欠点があるようです。

何をすべきか?ブーストソースをローカルで変更して中断可能にすることもできますが、それは悪い選択のように感じられ、移植性には役立たないと思います. アプリ全体を再設計して、スレッドの正常なシャットダウンの要件を削除することも、同様に魅力のない方法です...

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

c++ - Boost::Python と Boost::Threads に関する問題

私と友人は、Boost::Python を使用するアプリケーションを開発しています。Boost::Python を介して C++ でインターフェイスを定義し、Boost::Python から継承してクラスを作成する必要があるユーザーに公開しました。このクラスは、アプリケーションが取得してコールバック メカニズムに使用します。

これまでのところ、すべてがうまくいっています。ここで、関数のコールバックには時間がかかる場合があります (ユーザーが重いものをプログラムした可能性があります)...しかし、ウィンドウを再描画する必要があるため、「動かなくなった」ようには見えません。 . 一度に実行されるコールバックは 1 つだけです (他のスレッドが同時に python を呼び出すことはありません)。 Python 用にラップされた C++ コード。

私たちがしていることは、Py_Initialize() の直後に PyEval_InitThreads() を呼び出すことです。それから、独自のブースト スレッド内でコールバック関数を呼び出す前に、マクロ PY_BEGIN_ALLOW_THREADS を使用し、スレッドが終了したときにマクロ PY_END_ALLOW_THREADS を使用します。

実行が 2 番目のマクロに到達しないと言う必要はないと思います。実行するたびにいくつかのエラーが表示されます...しかし、実際のコールバックを呼び出している間は常にエラーが発生します。私はよくグーグルで検索し、スレッドに関するいくつかのPEPドキュメントを読みましたが、それらはすべて、Pythonモジュール内のスレッド化(純粋な仮想クラスが公開されているだけだとは思いません)またはPython内のスレッド化について話し、メインについてではありません複数のスレッドから Python を呼び出すアプリケーション。

助けてください、これは私を数時間イライラさせてきました。

Ps。ヘルプ!

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

c++ - 戻り値へのアクセスの同期

次の C++ メンバー関数を検討してください。

ここでの目的は、プライベート メンバー変数へのアクセスを同期することではなくm_size、呼び出し元が m_size の有効な値を確実に受け取るようにすることです。m_size目標は、他のスレッドが変更しているときに関数が同時に返されないようにすることm_sizeです。

しかし、この関数の呼び出しに潜在的な競合状態はありますか? ここでの RAII スタイルのロックが競合状態から保護するのに十分かどうかはわかりません。関数の戻り値がスタックにプッシュされる前に、ロックのデストラクタが呼び出されたとします。

スレッドセーフを保証するために、次のようなことをする必要がありますか?

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

c++ - C++ でエクスチェンジャー (ランデブー パターン) を実装する方法は?

Java には Exchanger クラス ( https://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Exchanger.html ) があります。C ++でそのようなものを実装する方法(ブーストを使用)?

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

c++ - 行ごとの読み取り/書き込みを並行しながら、ランダムに無限のスレッドとさまざまなバグ

boost::thread に基づいて 1 行ずつ読み取り、処理、書き込みを並列に実装したいのですが、現在のバージョンの動作は不定です。次のテストでは、読み取り (同時) キューを満たすことで CSV ファイルを読み取ります。出力ファイルに書き込まれる書き込みキュー (現時点では処理なし)。

発生した問題:

  • Windows と Unix の両方で、プログラムはランダムに終了せず (~3/5 回)、SIGSEGV を生成します (~1/100)
  • Unix では、多くのエラーがあります。スレッドの作成時の SIGABRT、作成後の「割り当てられたブロックの前にメモリがクローバーされました」(-> SIGABRT も)、ランダムに 1 ~ 15 行。

問題とコードを教えて、他の人に答えてもらうのは嫌いですが (私は時々あなたの側にいます)、信じてください、それを修正するために他に何も考えられません (スレッドの扱い、デバッグは悪夢です)ので、あらかじめお詫び申し上げます。ここにあります :

Main.cpp :

Io.hpp :

Io.cpp :

Threads.hpp :

このプロジェクトは重要であり、あなたが私を助けてくれれば本当に感謝しています =)

よろしくお願いします。

よろしく、

ミステールさん。

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

c++ - BOOST: 再帰的な shared_mutex?

Boost の shared_mutex は再帰的ではないようです。(全体を再実装することなく)