InterProcessServerTimeout

From SunFlurry wiki
Jump to: navigation, search
  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");