我用delphi做的系统服务程序为什么不能停止
我做的是用internetDial()函数用modem自动拨号(拨号失败重拨间隔1分钟,无限次),我发现自动拨了一次后该服务就无法停止和暂停,有时还无法关机。
代码如下function InternetGetConnectedState(lpdwFlags: LPDWORD;
dwReserved: DWORD): BOOL; stdcall; external 'WININET.DLL';procedure ServiceController(CtrlCode: DWord); stdcall;
begin
autoDial.Controller(CtrlCode);
end;function TautoDial.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TautoDial.Timer1Timer(Sender: TObject);
var
conn:DWORD;
dwConnectionTypes,
III:integer;
hwndParent:HWND;
begin
try
hwndParent:=0;
InternetGetConnectedState(@dwConnectionTypes, 0);
III:=(dwConnectionTypes and INTERNET_CONNECTION_MODEM); IF III=0 THEN
BEgin
InternetDial(hwndParent,
'gprs',
INTERNET_DIAL_UNATTENDED,
@Conn,
0);
addlog('dialLog.txt','掉线进行尝试拨号');
end;
except
addlog('dialLog.txt','拨号是发生异常');
end;
end;procedure TautoDial.addlog(filename:string;s:string);
var
fLog: textfile;
begin
if fileexists(sysPath+fileName) then
begin
Assignfile(fLog,sysPath+filename);
append(fLog);
writeln(flog,DateTimetostr(now)+' '+s);
closeFile(fLog);
end;
end;procedure TautoDial.ServiceStart(Sender: TService; var Started: Boolean);
var
path:string;
npos:integer;
begin
path:=paramstr(0);
npos:=pos('\',path);
while npos<>0 do
begin
syspath:=sysPath+copy(path,1,npos);
path:=copy(path,npos+1,length(path)-npos);
npos:=pos('\',path);
end;
started:=true;
end;procedure TautoDial.ServiceExecute(Sender: TService);
begin
showmessage('onlinKeeperExecute');
while not Terminated do begin
ServiceThread.ProcessRequests(false);
end;
end;procedure TautoDial.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
showmessage('onstop');
stopped:=true;
end;procedure TautoDial.ServicePause(Sender: TService; var Paused: Boolean);
begin
showmessage('onpause');
paused:=true;
end;procedure TautoDial.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Continued := true;
end;end.
我做的是用internetDial()函数用modem自动拨号(拨号失败重拨间隔1分钟,无限次),我发现自动拨了一次后该服务就无法停止和暂停,有时还无法关机。
代码如下function InternetGetConnectedState(lpdwFlags: LPDWORD;
dwReserved: DWORD): BOOL; stdcall; external 'WININET.DLL';procedure ServiceController(CtrlCode: DWord); stdcall;
begin
autoDial.Controller(CtrlCode);
end;function TautoDial.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TautoDial.Timer1Timer(Sender: TObject);
var
conn:DWORD;
dwConnectionTypes,
III:integer;
hwndParent:HWND;
begin
try
hwndParent:=0;
InternetGetConnectedState(@dwConnectionTypes, 0);
III:=(dwConnectionTypes and INTERNET_CONNECTION_MODEM); IF III=0 THEN
BEgin
InternetDial(hwndParent,
'gprs',
INTERNET_DIAL_UNATTENDED,
@Conn,
0);
addlog('dialLog.txt','掉线进行尝试拨号');
end;
except
addlog('dialLog.txt','拨号是发生异常');
end;
end;procedure TautoDial.addlog(filename:string;s:string);
var
fLog: textfile;
begin
if fileexists(sysPath+fileName) then
begin
Assignfile(fLog,sysPath+filename);
append(fLog);
writeln(flog,DateTimetostr(now)+' '+s);
closeFile(fLog);
end;
end;procedure TautoDial.ServiceStart(Sender: TService; var Started: Boolean);
var
path:string;
npos:integer;
begin
path:=paramstr(0);
npos:=pos('\',path);
while npos<>0 do
begin
syspath:=sysPath+copy(path,1,npos);
path:=copy(path,npos+1,length(path)-npos);
npos:=pos('\',path);
end;
started:=true;
end;procedure TautoDial.ServiceExecute(Sender: TService);
begin
showmessage('onlinKeeperExecute');
while not Terminated do begin
ServiceThread.ProcessRequests(false);
end;
end;procedure TautoDial.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
showmessage('onstop');
stopped:=true;
end;procedure TautoDial.ServicePause(Sender: TService; var Paused: Boolean);
begin
showmessage('onpause');
paused:=true;
end;procedure TautoDial.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Continued := true;
end;end.
解决方案 »
- delphi连access批量修改?
- 怎么开发一个带标题栏的panel,并在右上角带关闭按钮的
- 字段自动递增小问题!!在线急等!!高手指教!!!
- 怎样在中间层添加方法(函数)
- cxGrid問題
- 如何访问服务器上的SqlServer2000数据库?请给出详细的例子。
- 关于SQL Server中表,索引信息统计的问题(急,在线等)
- 打开的窗体的文本标识全是乱码
- 大家帮忙!在Ado中使用 Lookup字段,新增的记录post后不能再更改任何字段。
- 字符串问题
- 使RichEdit1的protected设为true后再设为False后为什么还是保护状态不能修改呀?急急急!!!!!!!!!!!!!
- 寻觅Delphi爱好者,顺便问一个问题
ServiceThread.ProcessRequests(false); //這裹可能有問題, 不能正确退出
不要写代码!!!