我目前正在使用类在c ++中创建一个计时器。
我有以下类声明:
class time
{
int min;
int sec ;
public:
void start()
{
for(int j = 0; j<60; j++)
{
if(min == 59)
min = 0;
}
for(int k = 0; k<60; k++)
{
if(sec == 59)
sec = 0;
cout<<min<<" : "<<sec<<endl;
sec++;
Sleep(1000);
system("Cls");
}
min++;
}
}a;
所以目前我可以通过a.start()
启动计时器我正在寻找一种方法来阻止它。有什么想法吗?
帮助表示赞赏:)
答案 0 :(得分:1)
如果您希望在任何给定时刻终止计时器,则需要一个主题。我在gcc 4.9.2上实现了一个。
#include <iostream>
#include <iomanip>
#include <thread>
#include <chrono>
class Timer
{
public:
Timer(uint minutes, uint seconds)
: m_minutes(minutes)
, m_seconds(seconds)
, m_active(false)
{ }
void
start()
{
m_active = true;
m_thread = std::thread([=]()
{
while(m_active && (m_minutes | m_seconds))
{
if(!m_seconds)
{
m_seconds = 59;
m_minutes = m_minutes - 1;
}
std::cout << std::setw(2) << std::setfill('0') << m_minutes << "m" << " "
<< std::setw(2) << std::setfill('0') << m_seconds-- << "s" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
}
void
stop()
{
m_active = false;
m_thread.join();
}
private:
std::thread m_thread;
uint m_minutes;
uint m_seconds;
bool m_active;
};
int main( )
{
Timer t(0, 10);
t.start();
std::this_thread::sleep_for(std::chrono::seconds(7));
t.stop();
return 0;
}
<强>输出:强>
00m 10s
00m 09s
00m 08s
00m 07s
00m 06s
00m 05s
00m 04s
t.stop()
在第7秒成功终止计时器(由主程序中的线程触发)。