A
agangr
Unregistered / Unconfirmed
GUEST, unregistred user!
我需要在程序中实时监控多个通讯端口发送过来的信号,并根据这些信号处理不同的
数据并通过这些端口发送给各终端,我想将整个处理过程放在Timer事件中用一个循环来处
理,问题是如果这样做,在处理与某个端口通讯的时候,另外的端口势必等待一个比较长
的时间,如何解决这个问题,有没有更好的解决的办法?
下面是我这段处理程序结构:
procedure TForm1.Timer1Timer(Sender: TObject);
var
state:integer;
p:integer;
test:integer;
begin
{监控各通讯端口数据,根据不同情况进行不同处理}
for p:=0 to phandle-1 do
begin
state:=Accept_Data(p);
if state<>-1 then
//接收到数据
begin
////////////////////////
case state of
1:
begin
Timer1.Enabled:=false;//关闭数据采集
if SendTime(p) then
//发送时间成功,开启数据采集
Timer1.Enabled:=True;
end;
2:
begin
//接收流水帐
Timer1.Enabled:=false;
if Accept_WasteBook(p) then
Timer1.Enabled:=True;
end;
3:
begin
//发送黑名单;
Timer1.Enabled:=false;
if Send_Backlist(p) then
Timer1.Enabled:=True;
end;
end;
////////////////////////////
end;
end;
end;
数据并通过这些端口发送给各终端,我想将整个处理过程放在Timer事件中用一个循环来处
理,问题是如果这样做,在处理与某个端口通讯的时候,另外的端口势必等待一个比较长
的时间,如何解决这个问题,有没有更好的解决的办法?
下面是我这段处理程序结构:
procedure TForm1.Timer1Timer(Sender: TObject);
var
state:integer;
p:integer;
test:integer;
begin
{监控各通讯端口数据,根据不同情况进行不同处理}
for p:=0 to phandle-1 do
begin
state:=Accept_Data(p);
if state<>-1 then
//接收到数据
begin
////////////////////////
case state of
1:
begin
Timer1.Enabled:=false;//关闭数据采集
if SendTime(p) then
//发送时间成功,开启数据采集
Timer1.Enabled:=True;
end;
2:
begin
//接收流水帐
Timer1.Enabled:=false;
if Accept_WasteBook(p) then
Timer1.Enabled:=True;
end;
3:
begin
//发送黑名单;
Timer1.Enabled:=false;
if Send_Backlist(p) then
Timer1.Enabled:=True;
end;
end;
////////////////////////////
end;
end;
end;