mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-20 04:03:57 +00:00
Use clock interfaces to precisely control time
This commit is contained in:
@@ -27,21 +27,15 @@ namespace
|
||||
if (performance_counter)
|
||||
{
|
||||
performance_counter.access([&](LARGE_INTEGER& value) {
|
||||
if (c.win_emu.time_is_relative())
|
||||
{
|
||||
value.QuadPart = static_cast<LONGLONG>(c.proc.executed_instructions);
|
||||
}
|
||||
else
|
||||
{
|
||||
value.QuadPart = std::chrono::steady_clock::now().time_since_epoch().count();
|
||||
}
|
||||
value.QuadPart = c.win_emu.steady_clock().now().time_since_epoch().count();
|
||||
});
|
||||
}
|
||||
|
||||
if (performance_frequency)
|
||||
{
|
||||
performance_frequency.access(
|
||||
[&](LARGE_INTEGER& value) { value.QuadPart = c.proc.kusd.get().QpcFrequency; });
|
||||
performance_frequency.access([&](LARGE_INTEGER& value) {
|
||||
value.QuadPart = c.proc.kusd.get().QpcFrequency; //
|
||||
});
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
@@ -3639,7 +3633,8 @@ namespace
|
||||
|
||||
if (timeout.value() && !t.await_time.has_value())
|
||||
{
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(timeout.read());
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(c.win_emu.steady_clock(),
|
||||
c.win_emu.system_clock(), timeout.read());
|
||||
}
|
||||
|
||||
c.win_emu.yield_thread();
|
||||
@@ -3666,7 +3661,8 @@ namespace
|
||||
|
||||
if (timeout.value() && !t.await_time.has_value())
|
||||
{
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(timeout.read());
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(c.win_emu.steady_clock(),
|
||||
c.win_emu.system_clock(), timeout.read());
|
||||
}
|
||||
|
||||
c.win_emu.yield_thread();
|
||||
@@ -3703,7 +3699,8 @@ namespace
|
||||
}
|
||||
|
||||
auto& t = c.win_emu.current_thread();
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(delay_interval.read());
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(c.win_emu.steady_clock(), c.win_emu.system_clock(),
|
||||
delay_interval.read());
|
||||
|
||||
c.win_emu.yield_thread();
|
||||
|
||||
@@ -3745,7 +3742,8 @@ namespace
|
||||
|
||||
if (timeout.value() && !t.await_time.has_value())
|
||||
{
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(timeout.read());
|
||||
t.await_time = utils::convert_delay_interval_to_time_point(c.win_emu.steady_clock(),
|
||||
c.win_emu.system_clock(), timeout.read());
|
||||
}
|
||||
|
||||
c.win_emu.yield_thread();
|
||||
|
||||
Reference in New Issue
Block a user