2
0
mirror of https://github.com/boostorg/thread.git synced 2026-01-29 08:02:12 +00:00

Fixed time precision bugs. Switched to Interlocked* methods for once.

[SVN r14867]
This commit is contained in:
William E. Kempf
2002-08-15 00:05:54 +00:00
parent 391de20ae0
commit 75c83fed96
11 changed files with 130 additions and 61 deletions

View File

@@ -244,14 +244,28 @@ void condition::do_wait()
bool condition::do_timed_wait(const xtime& xt)
{
int milliseconds;
to_duration(xt, milliseconds);
bool ret = false;
unsigned int res = 0;
res = WaitForSingleObject(reinterpret_cast<HANDLE>(m_queue), milliseconds);
assert(res != WAIT_FAILED && res != WAIT_ABANDONED);
bool ret = (res == WAIT_OBJECT_0);
for (;;)
{
int milliseconds;
to_duration(xt, milliseconds);
res = WaitForSingleObject(reinterpret_cast<HANDLE>(m_queue), milliseconds);
assert(res != WAIT_FAILED && res != WAIT_ABANDONED);
ret = (res == WAIT_OBJECT_0);
if (res == WAIT_TIMEOUT)
{
xtime cur;
xtime_get(&cur, TIME_UTC);
if (xtime_cmp(xt, cur) > 0)
continue;
}
break;
}
unsigned was_waiting=0;
unsigned was_gone=0;