1

デタッチされたスレッドがスレッドを作成し、次のスレッドを実行する前に a を待機している間に、メインスレッドから astd::threadを作成する可能性について考えています。detach()join()

しかし、最初のスレッドの後、次のスレッドの前に常にクラッシュするため、これは可能ではありません。

コードのどこか:

std::thread t1(&B::start, this); //Launch a thread
t1.detach();

内側B::start

std::thread t2(&C::start, this); //Launch a thread
t2.join();

std::thread t3(&D::start, this); //Launch a thread
t3.join();

std::thread t4(&D::start, this); //Launch a thread
t4.join();

内側C::start

std::cout << "Thread t2 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t2 waited for 60 seconds" << std::endl;

内側D::start

std::cout << "Thread t3 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t3 waited for 60 seconds" << std::endl;

内側E::start

std::cout << "Thread t4 is starting" << std::endl;
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds(60));
std::cout << "Thread t4 waited for 60 seconds" << std::endl;

だからここに私が期待していることがあります:

スレッドt1が作成され、メイン スレッドから切り離されるため、メイン アプリは で実行

され続けt1t2作成されて 60 秒間スリープします。

60 秒後にt3作成され、60 秒間スリープします。

60 秒後にt4作成され、60 秒間スリープします。

私のメインスレッドが実行し続けている間ずっと、そのことをしています。

更新:これをどのように取得して分割し、ヘッダーでstd::thread t1(&B::start, this); //Launch a thread宣言しますが、必要な場所で実行してから実行しますか?std::thread t1;(&B::start, this);detach();

4

1 に答える 1

0

なぜ最初のスレッドを切り離すのですか? とにかく、メインスレッドとは別に実行されます!

于 2013-12-11T18:27:50.400 に答える