【发布时间】:2019-01-07 00:30:54
【问题描述】:
更新
我按照建议在范围外创建了一个std::vector 的线程,所以我可以在线程完成它的工作后立即.join(),现在的问题是一旦线程加入程序就不会完全崩溃,因为它仍然在后台运行,但出现中止窗口。我检查了线程是否可以加入,并且确实是在尝试加入时。
Timer.cpp:
void Timer::Start(int time, void(*lf)()) {
slaveTimer = std::thread(&Timer::RunTimer, this, time, lf);
}
void Timer::RunTimer(int seconds, void(*lf)()) {
auto time = (std::chrono::seconds)seconds;
std::this_thread::sleep_for(time);
lf();
slaveTimer.join(); //Program Crashes
}
Main.cpp
Timer timer1(10, [](){ std::cout << "Hello World" << std::endl; });
原帖
我试图用多线程创建协程,问题是当我尝试让线程等待 X 秒时,我然后 thread.detach(); 但这需要几毫秒和屏幕(因为我正在显示GL) 冻结。我能想到的一种可能的解决方案是在执行操作之前使线程自身分离,但这似乎不可能,所以我想知道是否有任何方法可以做到这一点或类似的方法来解决这个问题。
【问题讨论】:
-
任何能看到几毫秒的人都有一些邪恶的眼球处理能力。
-
为什么要暂停线程才能调用
detach()? -
@Galik 我需要分离它然后暂停它,所以 sleep_for 不会影响其他线程
-
我个人会避免分离线程。我通常把它们放在一个
std::vector<std::thread>的范围内,这个范围旨在延长它们的寿命。 -
我强烈敦促您做出决定,线程将被分离(并管理其自己的生命周期)或加入(并且加入它的事物将管理其生命周期)并坚持该决定.试图区分差异会导致不必要的复杂化。
标签: c++ multithreading