mirror of
https://github.com/zouhuidong/HiEasyX.git
synced 2024-11-25 16:35:31 +08:00
DelayFPS 函数于 24/01/31 更新
- DelayFPS 于 24/01/31 更新 - 此次更新对这个函数进行改动,其目的是解决多线程使用时引发的问题,并提高精度 - 同时将 HpSleep(delay); 改为 std::this_thread::sleep_for(std::chrono::milliseconds(delay)); 有助于进一步提高精度 - this_thread::sleep_for 函数存在问题,据 https://developercommunity.visualstudio.com/t/Modifying-the-system-time-to-the-past-s/10476559 中,一对此函数进行修复,请确认 MSVC 版本以避免错误 - 使用模板 ```cpp static hiex::tDelayFPS recond; hiex::DelayFPS(recond, 24); ``` - 或是在循环上一级定义 hiex::tDelayFPS recond; 需要确保每个线程中有自己的 tDelayFPS,多个线程不能使用同一个 tDelayFPS
This commit is contained in:
parent
5848ce7da2
commit
329dceb326
@ -1,14 +1,20 @@
|
||||
#include "HiFPS.h"
|
||||
|
||||
#include "HiFunc.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
namespace HiEasyX
|
||||
{
|
||||
clock_t tRecord = 0;
|
||||
|
||||
void DelayFPS(int fps, bool wait_long)
|
||||
tDelayFPS::tDelayFPS() : tRecord(0) {}
|
||||
|
||||
// DelayFPS 于 24/01/31 更新
|
||||
// 此次更新对这个函数进行改动,其目的是解决多线程使用时引发的问题,并提高精度
|
||||
// 同时将 HpSleep(delay); 改为 std::this_thread::sleep_for(std::chrono::milliseconds(delay)); 有助于进一步提高精度
|
||||
// this_thread::sleep_for 函数存在问题,据 https://developercommunity.visualstudio.com/t/Modifying-the-system-time-to-the-past-s/10476559 中,一对此函数进行修复,请确认 MSVC 版本以避免错误
|
||||
// 使用模板
|
||||
/*
|
||||
static hiex::tDelayFPS recond;
|
||||
hiex::DelayFPS(recond, 24);
|
||||
*/
|
||||
// 或是在循环上一级定义 hiex::tDelayFPS recond; 需要确保每个线程中有自己的 tDelayFPS,多个线程不能使用同一个 tDelayFPS
|
||||
void DelayFPS(tDelayFPS& Record, int fps, bool wait_long)
|
||||
{
|
||||
if (wait_long)
|
||||
{
|
||||
@ -17,15 +23,15 @@ namespace HiEasyX
|
||||
}
|
||||
|
||||
clock_t tNow = clock();
|
||||
if (tRecord)
|
||||
if (Record.tRecord)
|
||||
{
|
||||
int delay = 1000 / fps - (tNow - tRecord);
|
||||
int delay = 1000 / fps - (tNow - Record.tRecord);
|
||||
if (delay > 0)
|
||||
{
|
||||
HpSleep(delay);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(delay));
|
||||
//HpSleep(delay);
|
||||
}
|
||||
}
|
||||
tRecord = clock();
|
||||
Record.tRecord = clock();
|
||||
}
|
||||
};
|
||||
|
||||
};
|
@ -1,17 +1,39 @@
|
||||
/**
|
||||
* @file HiFPS.h
|
||||
* @brief HiEasyX 库的帧率模块
|
||||
* @author huidong
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace HiEasyX
|
||||
{
|
||||
/**
|
||||
* @brief 根据目标帧率延时
|
||||
* @param[in] fps 帧率
|
||||
* @param[in] wait_long 是否长等待(降低占用)
|
||||
*/
|
||||
void DelayFPS(int fps, bool wait_long = false);
|
||||
};
|
||||
/**
|
||||
* @file HiFPS.h
|
||||
* @brief HiEasyX 库的帧率模块
|
||||
* @author huidong
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "HiFunc.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <thread>
|
||||
|
||||
namespace HiEasyX
|
||||
{
|
||||
struct tDelayFPS
|
||||
{
|
||||
clock_t tRecord;
|
||||
tDelayFPS(); // 声明构造函数,定义将在 HiFPS.cpp 中进行
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 根据目标帧率延时
|
||||
* @param[in] fps 帧率
|
||||
* @param[in] wait_long 是否长等待(降低占用)
|
||||
*/
|
||||
|
||||
// DelayFPS 于 24/01/31 更新
|
||||
// 此次更新对这个函数进行改动,其目的是解决多线程使用时引发的问题,并提高精度
|
||||
// 同时将 HpSleep(delay); 改为 std::this_thread::sleep_for(std::chrono::milliseconds(delay)); 有助于进一步提高精度
|
||||
// this_thread::sleep_for 函数存在问题,据 https://developercommunity.visualstudio.com/t/Modifying-the-system-time-to-the-past-s/10476559 中,一对此函数进行修复,请确认 MSVC 版本以避免错误
|
||||
// 使用模板
|
||||
/*
|
||||
static hiex::tDelayFPS recond;
|
||||
hiex::DelayFPS(recond, 24);
|
||||
*/
|
||||
// 或是在循环上一级定义 hiex::tDelayFPS recond; 需要确保每个线程中有自己的 tDelayFPS,多个线程不能使用同一个 tDelayFPS
|
||||
void DelayFPS(tDelayFPS& Record, int fps, bool wait_long = false);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user