mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 10:22:05 -05:00
df74a9222f
The scheduler expects m_select_timeout to act as a deadline. That is, it should contain the time that a task should wake at -- but we were directly copying the time from userspace, which meant that it always returned virtually immediately. At the same time, fix CEventLoop to not rely on the broken select behavior by subtracting the current time from the time of the nearest timer.
20 lines
448 B
C++
20 lines
448 B
C++
#include <LibCore/CElapsedTimer.h>
|
|
#include <AK/Assertions.h>
|
|
#include <AK/Time.h>
|
|
#include <sys/time.h>
|
|
|
|
void CElapsedTimer::start()
|
|
{
|
|
m_valid = true;
|
|
gettimeofday(&m_start_time, nullptr);
|
|
}
|
|
|
|
int CElapsedTimer::elapsed() const
|
|
{
|
|
ASSERT(is_valid());
|
|
struct timeval now;
|
|
gettimeofday(&now, nullptr);
|
|
struct timeval diff;
|
|
AK::timeval_sub(&now, &m_start_time, &diff);
|
|
return diff.tv_sec * 1000 + diff.tv_usec / 1000;
|
|
}
|