シナリオ:スレッドがdllから作成された場合、std :: asyncはプロセス終了をブロックしていますか?
私は私が別のDLLからエクスポートされた関数(exported_func
)を使用するコンソールアプリケーション(consoleApp
)を有します。その関数では、私は新しい無限のスレッドを開始しました。
EXPERIMENTAL_API int exported_func(void)
{
auto f = []() {
while (true)
{
cout << "H";
this_thread::sleep_for(100ms);
}
return 1;
};
async_res.value = async(launch::async, f);
return 1;
}
、私はこの関数を呼び出した、その後私は、main関数で無限ループを開始しmain()
機能から - ここでは、コードです。ここでは、コードです -
int main()
{
exported_func();
while (true)
{
cout << "L";
this_thread::sleep_for(100ms);
}
return 0;
}
問題:
問題は、私は、コンソールの[閉じる]ボタンをクリックして、私のコンソールアプリケーションを終了したい場合、それはアプリケーションを閉じるために10秒かかり、ということです。
さらに、私がCreateChildProcess
を使ってプロセス(consoleApp.exe用)を作成した場合、そのプロセスはExitProcess
を使用して終了できません。
しかし、(consoleAppの)main関数からスレッド(async)を作成するとすぐに終了し、ExitProcess
を使って終了することができます。
ここで何が起きているのか説明できますか?
注:私はVisual Studio 17、したがってVisual C++ v141ビルドツールを使用しています。
「async_res.value」とは何ですか? –
'async_res'は構造体であり、' future value'はそのメンバーです。 –
グローバル変数? –