Difference between revisions of "InterProcessServerTimeout"
1>Admin |
m (1 revision imported) |
(No difference)
| |
Latest revision as of 10:37, 18 November 2022
| InterProcessServerTimeout (Работа с подчиненными процессами) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция позволяет получать или изменять тайм-аут сторожевого пса родительского процесса на стороне подчиненного процесса. Это позволяет, к примеру, для более длительных операций увеличить тайм-аут или временно отключить его. Функция вызывается без указания интерфейса. Для описания функции включения и включения сторожевого пса родительского процесса, см. статью InterProcessTimeout.
Синтаксис
InterProcessServerTimeout(<Тайм-аут в мс.>):<Предыдущий тайм-аут в мс. (INT)>
Аргументы
<Тайм-аут в мс.>- (необязательный аргумент) Новый тайм-аут сторожевого пса родительского процесса в миллисекундах. Для отключения тайм-аута, необходимо использовать значение аргумента 0. Если аргумент не задан, тайм-аут не будет изменен.
Возвращаемое значение
Возвращает предыдущее значение тайм-аута.
Примеры
//Пример демонстрирует изменение тайм-аута при исполнении подчиненного процесса.
Function ОбычныйСон(Длина)
Sleep(Длина);
EndFunction
Function СистемныйСон(Длина)
aKernel32:=Lib.Load("Kernel32.dll");
aKernel32.RegisterFunction("Sleep","stdcall","UI32");
аСтарый:=InterProcessServerTimeout(Длина+1000);
aKernel32.Sleep(Длина);
InterProcessServerTimeout(аСтарый);
EndFunction
аПроцесс:=Mutex.InitializeSeparateProcess();
//Установим тайм-аут равным 2 секунды
аПроцесс.InterProcessTimeout(2000);
//Будет выведено "Шаг 1"
Message("Шаг 1");
//Будет выведено "Шаг 2"
//Несмотря на то, что Sleep ожидает больше 2 секунд, это внутреннее ожидание, которое периодически обновляет тайм-аут
аПроцесс.InterProcessExecuteFunction("ОбычныйСон",3000);
Message("Шаг 2");
//Будет выведено "Шаг 3"
//Благодяры тому, что подчиненный процесс может изменять тайм-аут сторожевого пса родительского, функция Sleep не вызвала его завершения
// из-за того, что родительский процесс обнаружил его "зависание"
аПроцесс.InterProcessExecuteFunction("СистемныйСон",3000);
Message("Шаг 3");