来自:wen 时间:2002-5-24 8:56:00 ID:1120690
1 FSemaphore: THandle;
2 FSemaphore := CreateSemaphore(nil, FMaxCount, FMaxCount, nil);
3 if WaitForSingleObject(FSemaphore, Timeout) = WAIT_FAILED then
raise Exception.Create('too busy');
//IF 信號不為0則減一返回,否則等到Timeout返回-->無資源可用.
//在等待過程一有信號釋放,則激活等待線程.
4 ReleaseSemaphore(FSemaphore, 1, nil);//信號加一,激活等待線程.
5 CloseHandle(FSemaphore);
原理看操作系統-->陳火旺的很詳細.
SetEvent,ResetEvent看WIN32.HLP就明白了.
INFINITE 无时间限制,无限等下去,直到进入
WAIT_OBJECT_0 指定对象进入信号后的状态