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

请问XE中 TCPServer 控件多线程接受数据的问题?折腾2天了。。。。

答題得分者是:aftcast
allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-11-05 20:12:08 IP:112.84.xxx.xxx 訂閱
 1.想学习一下TcpServer 和TcpClient 控件。但是现在碰到一个问题,就是TcpServer多线程的问题。

到网络查到的资料大部分是D7版本的。

2.现在我把线程放到2个事件中进程测试,都不能很好的获取数据。

1.放到Accept事件中,
//自定义接受线程========================================
TMyThread = class(TThread)
private
sRecv: string;
public
cs: TCustomIpClient;
procedure gogo;
protected
procedure Execute;override;
public
constructor Create(cs1: TCustomIpClient);
end;
///// 接受事件=============================================================
procedure TForm1.CPSV1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var
TMyThread.Create(ClientSocket);
end;

这样以来只能在TMyThread Creat 过程中recv数据 (但是一直循环接收 发送数据 还没测试不晓得正常不)

如果放在TMyThread Execute 中,cs已经错误了。。不能接受数据。


2.放到GetThread 中
procedure TForm1.CPSV1GetThread(Sender: TObject; var ClientSocketThread: TClientSocketThread);
begin
ClientSocketThread := TTTTT.Create(cpsv1.ServerSocketThread);
end;

不知道怎么写?

请问各位大大 如何多线程使用?

多谢各位了!!~
------
The empty vessels make the greatest sound.
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-11-09 19:29:41 IP:122.126.xxx.xxx 訂閱
建議別使用TCPServer控件了。這個是非常難用的。請改用tserversocket,或indy裡的元件。但若使用tserversocket,則要自己安裝這個元件。在安裝目錄下的bin下有個叫dclsockets150這個bpl,可自行安裝。

若你一定要使用TCPServer,我只能和你說,你需要去處理一個叫select的方法。使用它來處理讀與寫。
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-11-10 02:54:47 IP:180.125.xxx.xxx 訂閱
只好如此了, 现在换成自己封装类了。多谢!
------
The empty vessels make the greatest sound.
系統時間:2017-12-18 7:14:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!