2026-04-06 00:20:51 -05:00

55 lines
1.4 KiB
C++

#include "WaitMask.h"
void WaitMask(ULONG worktime, ULONG sleepTime, ULONG jitter)
{
ULONG maxSleepTime = 0;
if (worktime) {
maxSleepTime = worktime * 1000;
}
else if (sleepTime) {
maxSleepTime = sleepTime * 1000;
if (jitter) {
ULONG deltaTime = 0;
ULONG minTime = sleepTime * jitter / 100;
if (minTime)
deltaTime = GenerateRandom32() % minTime;
if (deltaTime < maxSleepTime)
maxSleepTime -= deltaTime;
}
}
mySleep(maxSleepTime);
}
void WaitMaskWithEvent(HANDLE hEvent, ULONG worktime, ULONG sleepTime, ULONG jitter)
{
ULONG maxSleepTime = 0;
if (worktime) {
maxSleepTime = worktime * 1000;
}
else if (sleepTime) {
maxSleepTime = sleepTime * 1000;
if (jitter) {
ULONG deltaTime = 0;
ULONG minTime = sleepTime * jitter / 100;
if (minTime)
deltaTime = GenerateRandom32() % minTime;
if (deltaTime < maxSleepTime)
maxSleepTime -= deltaTime;
}
}
if (hEvent) {
DWORD waitResult = ApiWin->WaitForSingleObject(hEvent, maxSleepTime);
if (waitResult == WAIT_OBJECT_0)
ApiWin->ResetEvent(hEvent);
}
else {
ApiWin->Sleep(maxSleepTime);
}
}
void mySleep(ULONG ms)
{
ApiWin->Sleep(ms);
}