出现网络异常,就重新自动启动,代码如何实现?(100分)

  • 主题发起人 主题发起人 so2005
  • 开始时间 开始时间
S

so2005

Unregistered / Unconfirmed
GUEST, unregistred user!
我 用IdTcpserver控件接受通过GPRS网络传输的数据,经常出现网络数据堵塞现象;
我想 如果出现网络异常,就重新自动启动,代码如何实现哪?
谢谢了
 
判断错误,
 
记录收到数据的时间和状态,用一个timer不断查询这个当前时间与这个时间的时间差和程序的状态,如果这个时间差超过了你设定的延时时间就执行你的重新启动的代码!
 
To qqjm: 我就是想知道:重新自身启动的代码,怎么写啊
 
另外在开个进程来控制自身的重启
 
怎么实现哪? 大峡
 
给程序写一个start和stop函数
start函数负责对程序进行初始化和打开控件
stop函数负责关闭控件和相关的清理工作.
如:
procedure XXXXX.Start;
begin
{相关的初始化代码.....}
IdTCPServer1.Active := true;
{另外的初始化代码....}
end;

procedure XXXXX.Stop;
begin
{相关的清理代码....}
IdTCPServer1.Active := false;
{另外的清理代码...}
end;

你也可以把这个两个函数写在一起写成Restart函数,至于怎么写这些函数,在那里调用这些函数,这就要看你的程序怎么设计了.
 
是启动电脑还是程序?
程序如下
var
opexe:string ;
begin
opexe:= application.ExeName ;
winexec(pchar( opexe),sw_show);
 
//Project1.dpr工程文件
program Project1;
uses
Forms,
windows,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
if isrest then
winexec(PChar(paramstr(0)),1);
end.

//Unit1.pas
unit Unit1;
interface
uses
Classes, Controls, Forms,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
isrest:Boolean=false;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
try
//..............
except
//异常啦
isrest:=true;
close;
end;

end;

end.
 
重启计算机的代码
var
st : SYSTEMTIME;
hToken : THANDLE;
tkp : TOKEN_PRIVILEGES;
rr : Dword;
begin
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
// 设定权限为1
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// 得到权限
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,rr);
// 重起计算机
ExitWindowsEx(EWX_REBOOT OR EWX_POWEROFF, 0)
end;
 
如果是重新启动程序
var
opexe:string ;
begin
opexe:= application.ExeName ;
winexec(pchar(opexe),sw_show);
Application.Terminate;
//加上这句,结束当前的程序
 
先再开一个,因为程序都是可以开两个的,
用调用程序的函数,
再对本身的程序进行关闭,
关的时候比较快,而开得比较慢,
不会让人觉得你是开两个程序后关一个的,
再对刚开的进行操作,具体的,看你要做什么了
 
后退
顶部