2006毕业设计Delphi篇(一)

    Delphi在这个工程里作为中间层起到的作用是
   1.调用下层api函数。
   2.负责通讯(上位机和下位机)。
   3.负责对下位机传上来的数据进行解码,容错和控制。
   4.负责对上位机下发的数据进行解码,容错和控制。
由于考虑到程序整体的稳定性大致按功能分为:
    主控程序(PTX):主要作用是控制这4个模块的稳定性。比如这4个模块中任何一个崩溃了,需要自动重启之。
    无线电接口程序(Server):主要作用和无线电发射机进行交互,因为整个工程是无线电和GPRS并用的。
    GPRS接口程序(GPRSServer):主要作用和GPRS硬件模块进行交互。
    ActiveX接口程序(ServerIn):主要作用是和网页中的ActiveX插件进行交互。
    Java后台接口程序(ClientIn):主要作用是和Java后台进行交互,当然java用的是jsp平台。
精力有限我只能一天一点给你们分析了,不重要的东西我就省略了,比如里面一个按钮是什么作用啦等等我就不写了。
   首先是主控程序(PTX)-->
这里用到了一个定时器Timer1,它的作用是每隔1妙作一次循环检测,检测上面4个模块是否死机了,如果死机就把相应的模块启动起来
None.gifprocedure TFormTX.Timer1Timer(Sender: TObject);
None.gifvar
None.gifdwExitCode:Dword;
None.giffprocessExit:
boolean;
None.gifbegin
None.gif     dwExitCode:
=0;
None.gif     fprocessExit:
=GetExitCodeProcess(PProcInfo_SERVER.hProcess,dwExitCode);
None.gif     
if  (fprocessExit and (dwExitCode<>STILL_ACTIVE)) then //判断相应模块是否退出了或者是状态不为激活状态了
None.gif       begin
None.gif         memo1.Lines.Add(
'Sever 进程终止!');
None.gif
         CloseHandle(PProcInfo_SERVER.hThread);//杀线程
None.gif         CloseHandle(PProcInfo_SERVER.hProcess);//杀进程
None.gif         ProccessSuccessful_SERVER;//重启相应的模块
None.gif         memo1.Lines.Add(
'Sever 进程启动!');
None.gif
       end;
None.gif
None.gif      dwExitCode:
=0;
None.gif     fprocessExit:
=GetExitCodeProcess(PProcInfo_ServerIn.hProcess,dwExitCode);
None.gif     
if  (fprocessExit and (dwExitCode<>STILL_ACTIVE)) then
None.gif       begin
None.gif         memo1.Lines.Add(
'ServerIn 进程终止!');
None.gif
         CloseHandle(PProcInfo_ServerIn.hThread);
None.gif         CloseHandle(PProcInfo_ServerIn.hProcess);
None.gif         ProccessSuccessful_ServerIn;
None.gif         memo1.Lines.Add(
'ServerIn 进程启动!');
None.gif
       end;
None.gif
None.gif      dwExitCode:
=0;
None.gif     fprocessExit:
=GetExitCodeProcess(PProcInfo_ClientIn.hProcess,dwExitCode);
None.gif     
if  (fprocessExit and (dwExitCode<>STILL_ACTIVE)) then
None.gif       begin
None.gif         memo1.Lines.Add(
'ClientIn 进程终止!');
None.gif
         CloseHandle(PProcInfo_ClientIn.hThread);
None.gif         CloseHandle(PProcInfo_ClientIn.hProcess);
None.gif         ProccessSuccessful_ClientIn;
None.gif         memo1.Lines.Add(
'ClientIn 进程启动!');
None.gif
       end;
None.gif
None.gif      dwExitCode:
=0;
None.gif     fprocessExit:
=GetExitCodeProcess(PProcInfo_GPRSSERVER.hProcess,dwExitCode);
None.gif     
if  (fprocessExit and (dwExitCode<>STILL_ACTIVE)) then
None.gif       begin
None.gif         memo1.Lines.Add(
'GPRSSERVER 进程终止!');
None.gif
         CloseHandle(PProcInfo_GPRSSERVER.hThread);
None.gif         CloseHandle(PProcInfo_GPRSSERVER.hProcess);
None.gif         ProccessSuccessful_GPRSSERVER;
None.gif         memo1.Lines.Add(
'GPRSSERVER 进程启动!');
None.gif
       end;
None.gif
end;
上面的代码中分为4个if 语句,每个if中有象ProccessSuccessful_SERVER,ProccessSuccessful_ServerIn,ProccessSuccessful_ClientIn,ProccessSuccessful_GPRSSERVER的函数
我们看看其中一个的定义(其他基本意思一样):
None.gifprocedure TFormTX.ProccessSuccessful_SERVER;
None.gifvar
None.gifbSuccess:
boolean;
None.gifbegin
None.gif   
if findwindow('TFormServer',nil)=0 then
None.gif
     begin
None.gif   ZeroMemory(@sStartInfo_SERVER,sizeof(sStartInfo_SERVER)); 
//zero memory
None.gif//设置必要的进程参数
None.gif   sStartInfo_SERVER.cb:
=sizeof(sStartInfo_SERVER);
None.gif   seProcess_SERVER.nLength:
=sizeof(seProcess_SERVER);
None.gif
None.gif   seProcess_SERVER.lpSecurityDescriptor:
=Pchar(nil);
None.gif   seProcess_SERVER.bInheritHandle:
=true;
None.gif   seThread_SERVER.nLength:
=sizeof(seThread_SERVER);
None.gif   seThread_SERVER.lpSecurityDescriptor:
=Pchar(nil);
None.gif   seThread_SERVER.bInheritHandle:
=true;
//创建进程
None.gif   bSuccess:
=CreateProcess(Pchar(nil),Pchar(ExtractFilePath(Paramstr(0))+'Server'),@seProcess_SERVER,@seThread_SERVER,
None.gif
                           false,CREATE_DEFAULT_ERROR_MODE,pchar(nil),pchar(nil),sStartInfo_SERVER,PProcInfo_SERVER);
None.gif   
if (not bSuccess)then
None.gif     Memo1.Lines.Add(
'Server 服务器创建失败!')
None.gif
     else
None.gif     Memo1.Lines.Add(
'Server 服务器创建成功!');
None.gif
     end;
None.gif
end;

这个函数是用来重启相应的4个模块中的一个的。当然最后一个步骤是当PTX结束时要把4个模块全部杀死。

None.gifprocedure TFormTX.FormClose(Sender: TObject; var Action: TCloseAction);
None.gifbegin
None.gif      Timer1.Enabled:
=false;
None.gif      TerminateProcess(PProcInfo_SERVER.hProcess,
10);
None.gif      PProcInfo_SERVER.hProcess:
=0;
None.gif       TerminateProcess(PProcInfo_GPRSSERVER.hProcess,
10);
None.gif      PProcInfo_SERVER.hProcess:
=0;
None.gif      TerminateProcess(PProcInfo_ServerIn.hProcess,
10);
None.gif      PProcInfo_ServerIn.hProcess:
=0;
None.gif      TerminateProcess(PProcInfo_ClientIn.hProcess,
10);
None.gif      PProcInfo_ClientIn.hProcess:
=0;
None.gif      TerminateProcess(PProcInfo_DelayTime.hProcess,
10);
None.gif      PProcInfo_DelayTime.hProcess:
=0;
None.gif
end;
当然还有其他一些修饰的东西,这里不累诉了。
这个监控主程序还是比较简单的,不过里面用到了不少windows api,希望你们好好揣摩揣摩。
不过dephi已经把这些api重新封装过了,看起来还是比较顺眼的呵呵。

转载于:https://www.cnblogs.com/coffeeliu/archive/2006/04/20/380646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值