私のプロジェクトでは、n秒ごとにデバイスをポーリングしてスリープして永遠に続ける必要があります。 std::thread
の代わりにasyncとして起動して非同期タスクを作成しました。しかし、私がstd::this_thread::sleep_for()
を非同期タスクとして使用して、非同期として起動すると、実際にメインスレッドがブロックされているように見えますか? 以下のプログラムは "Inside Async .."を永久に出力しますが、 "Main function"は決して出力しません。非同期タスクをスリープ
std::thread()
を使用すると、非同期の代わりに正常に動作します。しかし、私はそれに参加する必要はありませんし、スレッドとは異なり、その寿命を管理するので、非同期タスクを使用したいと思います。
非同期タスクをスリープ状態にする方法を教えてください。
#include <iostream>
#include <future>
#include <thread>
int main()
{
std::async(std::launch::async,
[]()
{
while(true)
{
std::cout <<"Inside async.."<< std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
}
});
std::cout <<"Main function"<< std::endl;
return 0;
}
単にスレッドを切り離すと、「スレッドに参加する必要はなくなり、スレッドのライフタイムを管理できます。 –
これについて、[documentation](https://stackoverflow.com/documentation/c%2b%2b/699/threading/4745/using-stdasync-instead-of-stdthread)があった時がありました。 – nwp
@samvarあなたのプログラムをきれいに終了させたい場合は、切り離しは簡単ではありません。 – Yakk