在ServerSocket中创建TServerClientThread的问题(200分)(200分)

  • 主题发起人 主题发起人 ludao
  • 开始时间 开始时间
L

ludao

Unregistered / Unconfirmed
GUEST, unregistred user!
我用了一个ServerSocket,采用ThreadBlocking方式与客户端通信.这时ServerSocket的事件
中只有OnGetThread,OnThreadStart,OnThreadEnd事件是可用的.但是在OnGetThread中创建
的线程名称都是SocketThread,当有多个连接时(自动开了多个线程).
1,我怎样在主线程里来区分这些线程呢?
2,这样创建的线程怎样来suspend和resume?
thx:)
 
没人用过这个吗?不可能吧?
 
使用TServersocket.Socket的属性和方法
function GetClientThread(ClientSocket: TServerClientWinSocket): TServerClientThread;
property ActiveConnections: Integer;
property ActiveThreads: Integer;
property Connections[Index: Integer]: TCustomWinSocket;
property IdleThreads: Integer;
1.用GetClientThread函数区分不同ClientSocket的线程
2.上面获得线程的引用后,可以调用其suspend和resume方法
 
thanks zhjwjan:)
能否举个例子说明一下GetClientThread的用法?我在主线程里怎样标识ServerSocket1GetThread
事件中create的多个线程?谢谢!
 
或者说,如果得到了线程的ThreadID,如何在主线程里给相应的线程发消息?使其suspend or
resume?谢谢!
 
你做一个线程数组就可以控制他们了,
 
好!用线程数组来赋值似乎不错.
最后想请教一下,多个线程可以共用一个socket吗?因为我要在线程里用socket去连接远程
服务器,并操作数据库.共用的话多个线程还能并发执行吗?假如可以,是不是也不如每个
线程里创建一个socket再操作数据库效率高?
谢谢!
 
Anyone know?[?]
等着结贴呢...[:)]
 
1.OnGetThread事件是在創建一個新連接線程之前觸發的,目的是可以允許用戶使用自己的
線程類(繼承自TServerClientThread),否則將使用默認的TServerClientThread線程類.
2.只要對Socket.ActiveConnection,Socket.Connections管理就可以了.例如:
for i:=0 to SrvSock.Socket.ActiveConnections-1 do
if SendHost=SrvSock.Socket.Connections.RemoteHost then
begin
SrvSock.Socket.Connections.SendText(SendData);
end;
3.線程是自動進行管理的. 若要直接對線程管理,需要記錄下所創建的線程.當然也是在
OnThreadStart,OnThreadEnd中. 或者想辦法引出TServerWinSocket中Private ActiveThreads: TList
來使用.
 
smokingroom,那你看看我的倒数第2个帖呢?socket共用和一个对一socket,哪个效率更好?
要考虑并行处理和消耗时间...
 
后退
顶部