1

現在、複数のタスク(4)を同時に起動するために std::async を使用しています。起動後、タスクが std::future オブジェクトを使用して終了するのを待ちます。問題は、システム監視が表示されると、 13 を超えるスレッドが作成され、終了していないようです。

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

System system;
std::vector<Compressor> m_compressorContainer(4);
std::vector<future<void> > m_futures(4);

while( system.isRunning() )
{

int index=0;

//launch one thread per compressor
for ( auto &compressor : m_compressorContainer )
{   
  m_futures[index++] = std::async(std::launch::any, &Compressor::process, compressor );
}

//wait for results
std::for_each( m_futures.begin(),m_futures.end(), [](std::future<void> &future){ future.get(); } );

}

各スレッドの終わりを待っているので、スレッドの数は常に 13 ではなく 4 になると予想していました。

わかりませんか?

4

1 に答える 1

2

スレッドは、メモリと同様に、将来の再利用のためにライブラリによって保持される場合があります。たとえばdelete p;、システムにメモリを返すことも保証されていません。

于 2013-06-06T12:22:32.330 に答える