mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 15:14:59 -06:00
21.02
This commit is contained in:
@@ -2,9 +2,62 @@
|
||||
|
||||
#include "StdAfx.h"
|
||||
|
||||
#ifndef _WIN32
|
||||
|
||||
#include "Synchronization.h"
|
||||
|
||||
namespace NWindows {
|
||||
namespace NSynchronization {
|
||||
|
||||
/*
|
||||
#define INFINITE 0xFFFFFFFF
|
||||
#define MAXIMUM_WAIT_OBJECTS 64
|
||||
#define STATUS_ABANDONED_WAIT_0 ((NTSTATUS)0x00000080L)
|
||||
#define WAIT_ABANDONED ((STATUS_ABANDONED_WAIT_0 ) + 0 )
|
||||
#define WAIT_ABANDONED_0 ((STATUS_ABANDONED_WAIT_0 ) + 0 )
|
||||
// WINAPI
|
||||
DWORD WaitForMultipleObjects(DWORD count, const HANDLE *handles, BOOL wait_all, DWORD timeout);
|
||||
*/
|
||||
|
||||
DWORD WINAPI WaitForMultiObj_Any_Infinite(DWORD count, const CHandle_WFMO *handles)
|
||||
{
|
||||
if (count < 1)
|
||||
{
|
||||
// abort();
|
||||
SetLastError(EINVAL);
|
||||
return WAIT_FAILED;
|
||||
}
|
||||
|
||||
CSynchro *synchro = handles[0]->_sync;
|
||||
synchro->Enter();
|
||||
|
||||
// #ifdef DEBUG_SYNCHRO
|
||||
for (DWORD i = 1; i < count; i++)
|
||||
{
|
||||
if (synchro != handles[i]->_sync)
|
||||
{
|
||||
// abort();
|
||||
synchro->Leave();
|
||||
SetLastError(EINVAL);
|
||||
return WAIT_FAILED;
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
|
||||
for (;;)
|
||||
{
|
||||
for (DWORD i = 0; i < count; i++)
|
||||
{
|
||||
if (handles[i]->IsSignaledAndUpdate())
|
||||
{
|
||||
synchro->Leave();
|
||||
return WAIT_OBJECT_0 + i;
|
||||
}
|
||||
}
|
||||
synchro->WaitCond();
|
||||
}
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user