線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2107
推到 Plurk!
推到 Facebook!

多線程通信問題

答題得分者是:Kingron
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-03 11:35:09 IP:219.134.xxx.xxx 訂閱
我的程式有網路和介面兩塊,網路層負責接收和發送消息,提供介面給介面調用發送消息出去,接收到消息後通知介面處理消息,請問通信線程和介面之間的通信我該怎麼實現?
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
lusm
一般會員


發表:0
回覆:3
積分:0
註冊:2007-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-17 20:03:36 IP:218.15.xxx.xxx 訂閱
你给的情况太过笼统 不清楚你具体想做什么?
我给你个网址 相信上面有你要的东西
http://www.moon-soft.com/program/bbs/docelite1713.htm
------
呵呵
主页 http://www.blogjava.net/lusm/
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-03 16:23:31 IP:125.89.xxx.xxx 訂閱
在你的通信线程当中,发送自定义的消息给界面就OK。


===================引 用 文 章===================
我的程式有網路和介面兩塊,網路層負責接收和發送消息,提供介面給介面調用發送消息出去,接收到消息後通知介面處理消息,請問通信線程和介面之間的通信我該怎麼實現?
------
超级猛料:http://kingron.delphibbs.com
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-06 11:09:46 IP:219.134.xxx.xxx 訂閱
能不能给个Demo啊?

另,你是超级猛料CHM的作者? 我买过这个CHM呢。

===================引 用 文 章===================
在你的通信线程当中,发送自定义的消息给界面就OK。
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
Kingron
中階會員


發表:1
回覆:51
積分:60
註冊:2005-09-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-06 12:51:05 IP:61.143.xxx.xxx 訂閱
It's me.  谢谢你的支持。

下面是一个简单的Demo,服务端的演示,你可以用Telnet连接100端口来测试,你也可以把PostMessage换成SendMessage,但这样会阻塞:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, StdCtrls;

const
CM_TCP_CONNECTED = WM_USER $100;
CM_TCP_COMMAND_A = WM_USER $101;
CM_TCP_DISCONNECT = WM_USER $102;

type
TForm1 = class(TForm)
idtcpclnt1: TIdTCPClient;
idtcpsrvr1: TIdTCPServer;
mmo1: TMemo;
btn1: TButton;
procedure idtcpsrvr1Connect(AThread: TIdPeerThread);
procedure idtcpsrvr1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
procedure CMTcpConnected(var Msg: TMessage); message CM_TCP_CONNECTED;
procedure CMTcpCommandA(var Msg: TMessage); message CM_TCP_COMMAND_A;
procedure CMTcpDisconnect(var Msg: TMessage); message CM_TCP_DISCONNECT;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.CMTcpCommandA(var Msg: TMessage);
begin
mmo1.Lines.Add(PChar(Msg.WParam));
FreeMemory(PChar(Msg.WParam));
end;

procedure TForm1.CMTcpConnected(var Msg: TMessage);
begin
mmo1.Lines.Add(PChar(Msg.WParam));
FreeMem(PChar(Msg.WParam));
end;

procedure TForm1.CMTcpDisconnect(var Msg: TMessage);
begin

end;
procedure TForm1.idtcpsrvr1Connect(AThread: TIdPeerThread);
var
P : PChar;
begin
GetMem(P, 1024);
StrPCopy(P, 'Client connect: ' AThread.Connection.Socket.Binding.PeerIP
IntToStr(AThread.Connection.Socket.Binding.Port));
PostMessage(Handle, CM_TCP_CONNECTED, Integer(P), 0);
end;

procedure TForm1.idtcpsrvr1Execute(AThread: TIdPeerThread);
var
Buffer: string;
Line: string;
P : PChar;
begin
while AThread.Connection.Connected and not AThread.Terminated do
begin
Line := AThread.Connection.ReadLn(#13#10);
if Line = 'commanda' then
begin
p := GetMemory(Length(Buffer) 1);
StrPCopy(p, Buffer);
PostMessage(Handle, CM_TCP_COMMAND_A, Integer(p), 0);
AThread.Connection.WriteLn('Command A recived');
end
else
Buffer := Buffer Line;
end;
end;

end.


===================引 用 文 章===================
能不能给个Demo啊?

另,你是超级猛料CHM的作者? 我买过这个CHM呢。

===================引 用 文 章===================

在你的通信线程当中,发送自定义的消息给界面就OK。
------
超级猛料:http://kingron.delphibbs.com
系統時間:2024-04-27 2:51:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!