procedure Tfrmxx.UServerUDPRead(AThread: TIdUDPListenerThread; AData: TBytes;
ABinding: TIdSocketHandle);
begin
if xxx then
begin
.. //(这里是收到某些命令后程序做的一些工作,其中包括一些界面交互的工作)
.. //不知道是否用自定义消息,在消息处理里面做,会不会好
..
..
end;
end;
问题源自发现程序容易死掉,怀疑是上面的问题
ABinding: TIdSocketHandle);
begin
if xxx then
begin
.. //(这里是收到某些命令后程序做的一些工作,其中包括一些界面交互的工作)
.. //不知道是否用自定义消息,在消息处理里面做,会不会好
..
..
end;
end;
问题源自发现程序容易死掉,怀疑是上面的问题
ABinding: TIdSocketHandle);
begin
if xxx then
begin
{这里创建一个新的线程,然后把需要的数据保存到线程中,并把线程保存到TThreadList对象,用Timer定时器定时处理TThreadList即可}
end;
end;
code=Delphi(Pascal)]
if xxx then
begin
PostMessage(,xx,Integer(P1),Integer(P2)); //P1,P2为UDP监听的数据,
end;在消息处理函数里,再做界面交互的事情,这样应该不会存在上面说的问题了吧,呵呵,言错恳请大伙指教![/code]
if xxx then
begin
PostMessage(,xx,Integer(@P1),Integer(@P2)); //P1,P2可以为UDP监听的数据结构,
end;
如果传输的数据量不大,只是命令接收信息的机器执行任务,那用楼上所说的消息就可以。
如果UDP的客户端比较多的话,还是另外开一个数据处理线程比较好,UServerUDPRead只管接收数据,往数据处理线程里加数据,数据处理线程负责把数据处理和发送给界面