Implemented NtYieldExecution.
This commit is contained in:
parent
5f21fd47f8
commit
de91a8dd0f
|
@ -241,17 +241,6 @@ LONG WINAPI KERNEL_nop(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SwitchToThread (KERNEL32.@)
|
||||
*/
|
||||
|
||||
BOOL WINAPI SwitchToThread(void)
|
||||
{
|
||||
Sleep(0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MulDiv (KERNEL32.@)
|
||||
* RETURNS
|
||||
|
|
|
@ -91,6 +91,15 @@ DWORD WINAPI SleepEx( DWORD timeout, BOOL alertable )
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* SwitchToThread (KERNEL32.@)
|
||||
*/
|
||||
BOOL WINAPI SwitchToThread(void)
|
||||
{
|
||||
return (NtYieldExecution() != STATUS_NO_YIELD_PERFORMED);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* WaitForSingleObject (KERNEL32.@)
|
||||
*/
|
||||
|
|
|
@ -270,6 +270,7 @@
|
|||
@ stdcall NtWriteFile(long long ptr ptr ptr ptr long ptr ptr)
|
||||
@ stub NtWriteRequestData
|
||||
@ stdcall NtWriteVirtualMemory(long ptr ptr long ptr)
|
||||
@ stdcall NtYieldExecution()
|
||||
@ stub PfxFindPrefix
|
||||
@ stub PfxInitialize
|
||||
@ stub PfxInsertPrefix
|
||||
|
@ -1079,7 +1080,6 @@
|
|||
@ stub NtReadFileScatter
|
||||
@ stub NtSignalAndWaitForSingleObject
|
||||
@ stub NtWriteFileGather
|
||||
@ stub NtYieldExecution
|
||||
@ stub RtlAddAtomToAtomTable
|
||||
@ stub RtlAllocateHandle
|
||||
@ stub RtlCreateAtomTable
|
||||
|
|
|
@ -618,6 +618,20 @@ NTSTATUS WINAPI NtWaitForSingleObject(HANDLE handle, BOOLEAN alertable, const LA
|
|||
}
|
||||
|
||||
|
||||
/******************************************************************
|
||||
* NtYieldExecution (NTDLL.@)
|
||||
*/
|
||||
NTSTATUS WINAPI NtYieldExecution(void)
|
||||
{
|
||||
#ifdef HAVE_SCHED_YIELD
|
||||
sched_yield();
|
||||
return STATUS_SUCCESS;
|
||||
#else
|
||||
return STATUS_NO_YIELD_PERFORMED;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************
|
||||
* NtDelayExecution (NTDLL.@)
|
||||
*/
|
||||
|
@ -635,9 +649,10 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
|
|||
{
|
||||
for (;;) select( 0, NULL, NULL, NULL, NULL );
|
||||
}
|
||||
#ifdef HAVE_SCHED_YIELD
|
||||
else if (!timeout->QuadPart) sched_yield();
|
||||
#endif
|
||||
else if (!timeout->QuadPart)
|
||||
{
|
||||
NtYieldExecution();
|
||||
}
|
||||
else
|
||||
{
|
||||
abs_time_t when;
|
||||
|
|
|
@ -1371,6 +1371,7 @@ NTSTATUS WINAPI NtWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
|
|||
NTSTATUS WINAPI NtWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
|
||||
NTSTATUS WINAPI NtWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
|
||||
NTSTATUS WINAPI NtWriteVirtualMemory(HANDLE,void*,const void*,SIZE_T,SIZE_T*);
|
||||
NTSTATUS WINAPI NtYieldExecution(void);
|
||||
|
||||
void WINAPI RtlAcquirePebLock(void);
|
||||
BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK,BYTE);
|
||||
|
|
Loading…
Reference in New Issue