首先重载TServerClientThread的ClientExecute方法:
procedure TMyThread.ClientExecute; begin repeat until... end; 在ServerSocket.OnGetThread中创建自己的线程: procedure ServerSocket1GetThread(...); begin MyThread := TMyThread.Create(False, ClientSocket); end; |
当发生ServerSocket.ClientRread (or ClientWrite)时,
修改对应线程的Tserverclientthread.Data即可.
当然最好是让ServerClientThread自己主动调用TWinSocketThread操纵
ClinetSocket的读写.
ThreadCache用来保存以创建的线程,这样当一个会话完成后,不是方对应线程,
而是留作以后使用,节省了时间,但耗费资源.
————————————————————————————————————————————————
使用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方法
1.OnGetThread事件是在創建一個新連接線程之前觸發的,目的是可以允許用戶使用自己的
線程類(繼承自TServerClientThread),否則將使用默認的TServerClientThread線程類.
2.只要對Socket.ActiveConnection,Socket.Connections[ i]管理就可以了.例如:
for i:=0 to SrvSock.Socket.ActiveConnections-1 do if SendHost=SrvSock.Socket.Connections[ i].RemoteHost then begin SrvSock.Socket.Connections[ i].SendText(SendData); end; |
3.線程是自動進行管理的. 若要直接對線程管理,需要記錄下所創建的線程.當然也是在
OnThreadStart,OnThreadEnd中. 或者想辦法引出TServerWinSocket中Private ActiveThreads: TList
來使用.
转载于:https://blog.51cto.com/525927/121280