![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Написание службы с циклом
Molnia © (2010-08-11 09:08:00)Доброго времени суток уважаемые знатоки. Необходимо написать сервис VCL, который по таймеру будет выполнять определенные действия. Код который нужно выполнять есть, но проблема в том что сервис не запускает таймер =( Google не выдал ни одного рабочего примера. Пожалуйста дайте исходник работающего сервиса который например по таймеру пишет в файл фразу.
Заранее благодарю.
Плохиш (2010-08-11 11:39:00) [21]
> Molnia © (11.08.10 11:19) [11]
> не выполняется вообще ни разу
Неужели в файле нет слова "test"?
PS. Справку по Reset уже прочитал?
Ega23 (2010-08-11 11:31:00) [22]Хотя нет, отставить. Поторопился.
Ega23 (2010-08-11 11:29:00) [23]
Assignfile(f,'C:\test\test.txt');
Rewrite(f);
CloseFile(f);
Вы делаете мне смеяться.
Сергей М. (2010-08-11 11:26:00) [24]Ну опять же - с чего ты взял что "ни разу" ?
То что в файл не добавляется строка 'test', запросто может говорить о падении сервиса на строчке Reset()
Molnia (2010-08-11 11:19:00) [25]Файл как раз появляется, и исключений там нет, а вот кусок кода
while not self.terminated do
begin
Reset(f);
writeln(f,'test');
CloseFile(f);
sleep(5000);
self.ReportStatus;
self.ServiceThread.ProcessRequests(false);
end;
не выполняется вообще ни разу
Сергей М. (2010-08-11 11:12:00) [26]И где в этом коде таймер ?
> служба сразу стопится, а код не выполняется в принципе
"Ты видишь суслика ? И я не вижу. А он есть" (с) ДМБ
То что нет видимых результатов выполнения, вовсе не говорит о том что код не выполняется.
Ты ждешь появления файла C:\test\test.txt, а он не появляется ?
Это, скорее всего, говорит о том что при выполнении кода обработчика OnExecute возникло исключение и сервис по этой причине завершил работу.
Искл-е вполне могло возникнуть уже на строчке Rewrite().
George (2010-08-11 11:11:00) [27]Возможно где-то ошибка вылетает, надо отлаживать, я отлаживал с помощью функции OutputDebugString(), которую потом переделал во WriteToLog() :). Кстати, я бы порекомендовал создать отдельный поток и делать через события OnStart и OnStop.
Molnia (2010-08-11 11:01:00) [28]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TService1 = class(TService)
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
Service1: TService1;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceExecute(Sender: TService);
var
f:textfile;
begin
Assignfile(f,'C:\test\test.txt');
Rewrite(f);
CloseFile(f);
while not self.terminated do
begin
Reset(f);
writeln(f,'test');
CloseFile(f);
sleep(5000);
self.ReportStatus;
self.ServiceThread.ProcessRequests(false);
end;
end;
end.
Сергей М. (2010-08-11 10:57:00) [29]Ну тады показывай код ..
Molnia (2010-08-11 10:47:00) [30]неа, устанавливал с ключиком /install и запускал через оснастку сервисов.
Сергей М. (2010-08-11 10:44:00) [31]
> Так служба сразу стопится
Так ты поди исп.файл службы запускаешь не как службу, а как обычное приложение)
Molnia (2010-08-11 10:30:00) [32]Так служба сразу стопится, а код не выполняется в принципе =(
George (2010-08-11 09:53:00) [33]А я, например делал проще:
while not self.terminated do
begin
<do_something>;
sleep(5000);
self.ReportStatus;
self.ServiceThread.ProcessRequests(false);
end;
И таймер не нужен.
Molnia (2010-08-11 09:48:00) [34]
> это что за хрень такая?
Имелось ввиду с использованием VCL, а на WinAPI. VCL - библиотека классов.
KilkennyCat (2010-08-11 09:40:00) [35]
> сервис VCL
это что за хрень такая?