[解決済み] アクティブな例外なしで呼び出されたC++の終了
2022-01-12 06:32:09
質問
コードは次のとおりです。
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
template<typename TYPE>
class blocking_stream
{
public:
blocking_stream(size_t max_buffer_size_)
: max_buffer_size(max_buffer_size_)
{
}
//PUSH data into the buffer
blocking_stream &operator<<(TYPE &other)
{
std::unique_lock<std::mutex> mtx_lock(mtx);
while(buffer.size()>=max_buffer_size)
stop_if_full.wait(mtx_lock);
buffer.push(std::move(other));
mtx_lock.unlock();
stop_if_empty.notify_one();
return *this;
}
//POP data out of the buffer
blocking_stream &operator>>(TYPE &other)
{
std::unique_lock<std::mutex> mtx_lock(mtx);
while(buffer.empty())
stop_if_empty.wait(mtx_lock);
other.swap(buffer.front());
buffer.pop();
mtx_lock.unlock();
stop_if_full.notify_one();
return *this;
}
private:
size_t max_buffer_size;
std::queue<TYPE> buffer;
std::mutex mtx;
std::condition_variable stop_if_empty,
stop_if_full;
bool eof;
};
実行すると、エラーが発生します。
terminate called without an active exception
Aborted
この例を参考に、コードをモデル化しました。 http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html
解決方法は?
スレッドオブジェクトがスコープ外に出たとき、それが参加可能な状態であれば、プログラムは終了します。標準委員会は、結合可能なスレッドのデストラクタについて、他に2つの選択肢を持っていました。静かにjoinする -- しかし、スレッドが動かなくなった場合、joinは決して戻らないかもしれない。あるいは、スレッドをデタッチすることもできます(デタッチされたスレッドは参加可能ではありません)。しかし、デタッチド・スレッドは非常にやっかいで、プログラムの最後まで生き残り、リソースの解放を台無しにするかもしれないからだ。ですから、プログラムを終了させたくない場合は、必ずすべてのスレッドに参加(またはデタッチ)するようにしてください。
関連
-
[解決済み] 式は変更可能なlvalueでなければならない
-
[解決済み】C++使用時、代入の左オペランドにlvalueが必要なエラーについて
-
[解決済み】C++の<map>に相当するC#は何ですか?[重複しています]
-
[解決済み】c++のコンパイルエラーです。ISO C++はポインタと整数の比較を禁止しています。
-
[解決済み】C++で「Xは型名ではありません」エラー
-
[解決済み】例外:AAPT2エラー:詳細はログを確認してください。
-
[解決済み】 c++ "Incomplete type not allowed" クラス参照情報へのアクセスエラー (前方宣言による円環状依存性)
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み】mysqli_fetch_array() は、パラメータ 1 が mysqli_result であることを期待し、boolean は【重複】で与えられました。
-
[解決済み】math.hを含むにもかかわらず、C言語でpow( )への未定義参照【重複あり
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
InstallShield でレジストリキーを取得するスクリプト
-
[解決済み】C++使用時、代入の左オペランドにlvalueが必要なエラーについて
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み】lm.fit(x,y,offset = offset, singular.ok,...) boxcox式で0非NAケースでエラーになる。
-
[解決済み】このリポジトリで別のgitプロセスが動作しているようです。
-
[解決済み】GAEで完全に有効なXMLをパースすると「Prologではコンテンツが許可されません」と表示される
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】二重の空きや破損(fasttop)
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない。
-
[解決済み] std::thread::detachはいつ使うべきですか?