//HEADER

float ThreadRefreshRate = 0.0166667f;

//HEADER
std::chrono::time_point<std::chrono::steady_clock> tOldTime = std::chrono::steady_clock::now();

while (!bWantsToStop)
{
const auto CurrentTime = std::chrono::steady_clock::now();
double DeltaTime = std::chrono::duration_cast<std::chrono::milliseconds>(CurrentTime - tOldTime).count() * 1000.0;
tOldTime = CurrentTime

float tWaitingTime = 0.f;
if (ThreadRefreshRate <= DeltaTime)
{
//Clamps the value between second param and third param
tWaitingTime = FGenericMathLibrary::Clamp(DeltaTime - ThreadRefreshRate, 0.0, ThreadRefreshRate);
DeltaTime = tWaitingTime;
}

// Do Somesomething here

std::this_thread::sleep_for(std::chrono::milliseconds(tWaitingTime * 0.001f));
}
}


์ธ๋””๊ฒŒ์ž„๊ฐœ๋ฐœ ๊ฐค๋Ÿฌ๋ฆฌ์— ์งˆ๋ฌธ ๋“œ๋ฆฌ๊ณ  ๋‹ต๋ณ€์œผ๋กœ std::chrono ์‹œ๊ฐ„ ์—ฐ์‚ฐ์ด 0.01 ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๊ฒŒ ๋˜๋ฉด ์—ฐ์‚ฐ์ด ์ž˜ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š” ๊ฑธ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค..

(๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์‹  ๋ถ„ ์ค‘ ๋””๋ฒ„๊น… ๋ชจ๋“œ์—์„œ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์Šค๋ ˆ๋“œ์—์„œ sleep ์•ˆ ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ์ „ ๋‹น์žฅ ๋””๋ฒ„๊น… ๋ชจ๋“œ๋ฅผ ๋บ„ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.)


์ปดํ“จํ„ฐ ์‹ค์ œ ์‹œ๊ฐ„์„ ์ด์šฉํ•ด ์‹œ์ฐจ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์จ๋„ ms ๋‹จ์œ„์—์„œ๋Š” ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ์˜ค์ฐจ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.


๊ทธ๋ž˜์„œ 0.01์•„๋ž˜๋Š” ๋ฌด์˜๋ฏธํ•œ ์‹œ์ฐจ๋กœ ์ƒ๊ฐํ•œ ๋’ค ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋žซํผ์— ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋งž์ถœ ์ˆ˜ ์žˆ์„๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ


DeltaTime์ด RefreshRate ํƒ€๊ฒŸ์„ ๋„˜์–ด์„ค ๊ฒฝ์šฐ


DeltaTime์„ RefreshRate๋กœ ๋นผ๊ณ  ๊ทธ ๊ฐ’์„ 0.0๊ณผ RefreshRate ์‚ฌ์ด๋กœ ํด๋žจํ•‘ํ•ด DeltaTime์œผ๋กœ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๊ทธ ํ›„ ์œ„์—์„œ ์—ฐ์‚ฐํ•œ tWaitingTime์œผ๋กœ sleep ํ•ด์ฃผ๋ฉด๋ฉ๋‹ˆ๋‹ค


๋„์™€์ฃผ์‹  ๋ถ„๋“ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.