Фоновый процесс в галактике
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный гость
- Сообщения: 60
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Фоновый процесс в галактике
Здравствуйте.
Есть задача написать цикл "слежения" за файликом. Если данные в нем изменяются, то галка должна вызвать определенный фейс.
Написал dll, однако цикл, её вызывающий из собственного фейса, понятное дело, вешает всю систему.
Есть какие либо мысли по этому поводу, может можно таймер как то установить и событие проверки периодически вызывать. Буду благодарен за любые предложения.
Есть задача написать цикл "слежения" за файликом. Если данные в нем изменяются, то галка должна вызвать определенный фейс.
Написал dll, однако цикл, её вызывающий из собственного фейса, понятное дело, вешает всю систему.
Есть какие либо мысли по этому поводу, может можно таймер как то установить и событие проверки периодически вызывать. Буду благодарен за любые предложения.
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
У меня именно так и сделано, о результате см. выше.
В описании VIP написано что cmIdle проходит сразу после сдвига записи по таблице (cmPosUp etc.), а у меня это может произойти 1 раз в 5 минут, соответственно это событие проходит задолго до обновления файлика. Из-за этого может не работать? И как это избежать?
В описании VIP написано что cmIdle проходит сразу после сдвига записи по таблице (cmPosUp etc.), а у меня это может произойти 1 раз в 5 минут, соответственно это событие проходит задолго до обновления файлика. Из-за этого может не работать? И как это избежать?
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
хм...
тогда в HandleEvent End попробуй использовать событие
Always : { ... } и в нем юзать свою функцию
Справочно:
Обработчик Always и функция CurCommand
* Появилась возможность описания секции в обработчике HandleEvent и TableHandleEvent для обработки всех команд (Always). Секция Always будет вызываться для любой команды в обработчике независимо от наличия секции для обработки текущей команды.
* Появился метод интерфейса CurCommand : word для получения текущей команды
Пример
HandleEvent
cmInit : {}
Always
{
Message (string (CurCommand)); // так не делать - зациклится !
}
cmPositionChanged : {}
End;
Версия : Атлантис 3.03.03.
тогда в HandleEvent End попробуй использовать событие
Always : { ... } и в нем юзать свою функцию
Справочно:
Обработчик Always и функция CurCommand
* Появилась возможность описания секции в обработчике HandleEvent и TableHandleEvent для обработки всех команд (Always). Секция Always будет вызываться для любой команды в обработчике независимо от наличия секции для обработки текущей команды.
* Появился метод интерфейса CurCommand : word для получения текущей команды
Пример
HandleEvent
cmInit : {}
Always
{
Message (string (CurCommand)); // так не делать - зациклится !
}
cmPositionChanged : {}
End;
Версия : Атлантис 3.03.03.
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
-
- Местный житель
- Сообщения: 228
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Код: Выделить всё
Interface Name1;
Create view;
file aFile;
var
ST : string;
flag : word;
dir_name : string;
mask_name : string;
file_name : string;
Panel pan_IMPORT;
Screen sc_IMPORT;
show at(,,,);
buttons
cmOk,Default,, 'Закрыть интерфейс' ,,;
<<
<.Остановка.>
>>
end; //screen
HandleEvent
cmOK :
{
CloseInterface(cmOK);
}
end; // HandleEvent
end; //panel
HandleEvent
Always
{
if findfirstfile(dir_name+mask_name, file_name) do
{
_try {
flag := 0;
aFile.OpenFile (dir_name+file_name, stOpenRead);
aFile.ReadLn(ST);
...
...
if ST <> '' then flag := 1;
aFile.Close;
if flag = 1 then if DeleteFile(dir_name+file_name)=true then {...};
}
_except
on ExFileNotFound :
{
message('Файл '+dir_name+file_name+' не найден или повреждён',2);
};
}while findnextfile(file_name);
}
cmInit:
{
dir_name := '\\server\dir';
mask_name := '*.txt';
}
end; // HandleEvent
end.