私は非同期の方法でいくつかの関数を実行しようとしています。この目的のために、Core
というクラスを作成しました。ここでは、別のスレッドで関数を実行するのにstd::async
を使用し、std::shared_future<int>
を使用してこのスレッドを待って、将来の結果を得ることができます。このエラーとstd :: asyncとstd :: shared_futureがプログラムを停止させます
std::cout << "Boom" << std::endl; // Error occurs here
:
#include <iostream>
#include <future>
class Core : public std::enable_shared_from_this<Core>
{
public:
Core()
: isRunning_(false) {
};
~Core() {
isRunning_ = false;
if (f_.valid())
{
f_.wait();
std::cout << "Result is: " << f_.get() << std::endl;
}
};
void Start() {
isRunning_ = true;
auto self(shared_from_this());
f_ = std::async(std::launch::async, [self, this]() {
try {
while (true) {
if (!isRunning_)
break;
std::cout << "Boom" << std::endl; // Error occurs here
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
catch (const std::exception& e) {
std::cerr << "Loop error:" << e.what();
}
return 999;
});
}
private:
std::shared_future<int> f_;
std::atomic<bool> isRunning_;
};
int main()
{
try {
std::shared_ptr<Core> load(new Core);
load->Start();
throw std::runtime_error("Generate error"); // Added in order to generate error
}
catch (const std::exception& e) {
std::cout << "Error occurred: " << e.what();
}
return 0;
}
私はそれがこのラインでクラッシュし、このプログラムを起動するたび:これはテストプログラムのコードである
私はデバッグ中に取得できたデバッガエラーとコールスタックです:
Core
デストラクタ関数がまったく呼び出さないように見えます。それはなぜ起こるのですか?奇妙な!!!
私のミスはどこに教えてください。ありがとう。
エラーは何ですか? –
エラーの説明はありません...プログラムはただちに終了します – definename
デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – NathanOliver