gpt4 book ai didi

c++ - 限制事件的发生

转载 作者:行者123 更新时间:2023-11-30 02:08:53 25 4
gpt4 key购买 nike

我有一个控制灯泡的函数。灯泡被编程为在按下某个键时闪烁。但是,我想限制闪光之间的最小间隔,以防止灯泡烧坏。灯泡由接在串口上的继电器开关控制,代码如下:

void WINAPI flash (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
//MATT: Define the serial port procedure
HANDLE hSerial;

//MATT: Fire the flash (by initialising and uninitialising the port)
hSerial = CreateFile("COM1",GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); CloseHandle(hSerial);
}

如何限制以毫秒为单位的最小闪烁间隔(毫秒精度非常重要)?

最佳答案

您可以使用一个简单的变量来保持 QueryPerformanceCounter 报告的时间。 QPC 的准确性在大多数系统上都非常非常高。在我的系统上,频率为 280 万次或每十个处理器时钟一个滴答。

class bulb {
__int64 clocks;
__int64 frequency;
public:
static const int max_ms_between_flashes = 1;
bulb() {
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
frequency = li.QuadPart;
clocks = 0;
}
void flash(...) {
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
if (clocks == 0) {
// We are the first time, so set the clocks var
// and flash the bulb
clocks = li.QuadPart;
} else {
__int64 timepassed = clocks - li.QuadPart;
if (timepassed >= (((double)frequency) / (max_ms_between_flashes * 1000))) {
// It's been more than 1ms
clocks = li.QuadPart;
// flash the bulb
}
}
}
}

关于c++ - 限制事件的发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com