我有这个简单的功能:
class Timer {
std::atomic<bool> active{true};
public:
void setInterval(auto function, int interval);
void stop();
};
void Timer::setInterval(auto function, int interval) {
active = true;
std::thread t([=]() {
while(active.load()) {
std::this_thread::sleep_for(std::chrono::milliseconds(interval));
if(!active.load()) return;
function();
}
});
t.detach();
}
void Timer::stop() {
active = false;
}
字符串
现在,当我尝试运行它时:
int main()
{
printf("start\n");
Timer* timer = new Timer();
timer->setInterval([&]() {
std::cout << "hello" << std::endl;
},1000);
return 0;
};
型
只有从主类打印的开始,它永远不会到达setInterval函数中的函数。它只是停止应用程序,没有错误。
compile/link命令:
/usr/bin/g++ -fdiagnostics-color=always -std=c++14 -pthread -g /home/vagrant/cpp/batch/main.cpp -o /home/vagrant/cpp/batch/main
型
1条答案
按热度按时间7tofc5zh1#
下面是正确使用线程对象来运行计时器的众多方法之一。
字符串