mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-07-04 05:55:47 -07:00
the old debug_assert always ran and tested the expression, which slows down release builds. wrapping them in #ifndef NDEBUG is clumsy. the new ASSERT behaves like assert and ENSURE like the old debug_assert. Let's change any time-critical but not-super-important ENSURE to ASSERT to speed up release builds. (already done in bits.h and unique_range.h) This was SVN commit r9362.
32 lines
1,021 B
C++
32 lines
1,021 B
C++
#include "precompiled.h"
|
|
#include "lib/sysdep/os/win/wiocp.h"
|
|
|
|
#include "lib/file/file.h" // ERR::IO
|
|
#include "lib/sysdep/os/win/wutil.h"
|
|
|
|
|
|
void AttachToCompletionPort(HANDLE hFile, HANDLE& hIOCP, ULONG_PTR key, DWORD numConcurrentThreads)
|
|
{
|
|
WinScopedPreserveLastError s; // CreateIoCompletionPort
|
|
|
|
// (when called for the first time, ends up creating hIOCP)
|
|
hIOCP = CreateIoCompletionPort(hFile, hIOCP, key, numConcurrentThreads);
|
|
ENSURE(wutil_IsValidHandle(hIOCP));
|
|
}
|
|
|
|
|
|
LibError PollCompletionPort(HANDLE hIOCP, DWORD timeout, DWORD& bytesTransferred, ULONG_PTR& key, OVERLAPPED*& ovl)
|
|
{
|
|
if(hIOCP == 0)
|
|
return ERR::INVALID_HANDLE; // NOWARN (happens if called before the first Attach)
|
|
|
|
bytesTransferred = 0;
|
|
key = 0;
|
|
ovl = 0;
|
|
if(GetQueuedCompletionStatus(hIOCP, &bytesTransferred, &key, &ovl, timeout))
|
|
return INFO::OK;
|
|
if(GetLastError() == WAIT_TIMEOUT)
|
|
return ERR::AGAIN; // NOWARN (nothing pending)
|
|
else
|
|
return ERR::FAIL; // NOWARN (let caller decide what to do)
|
|
}
|