百思不得其解的线程的问题!高手快来!(100分)

  • 主题发起人 主题发起人 yangzhengling
  • 开始时间 开始时间
Y

yangzhengling

Unregistered / Unconfirmed
GUEST, unregistred user!
如下一段代码:
CSocket := TClientSocket.Create(nil);
CSocket.Address := '192.168.8.88';
CSocket.Port := 9888;
CSocket.OnConnect := ClientSocket1Connect;
CSocket.Active := True;
用按钮调用则 关联的过程ClientSocket1Connect能执行,为什么用线程中的Execute执行这段代码,则Socket能连接上,但是关联的过程ClientSocket1Connect确始终不会执行!这是怎么回事呀?
 
你是用是TClientSocket的异步模式,是基于消息队列的,线程里没有消息队列,当然什么事件都无法响应了
 
喔!那我想在线程中创建多个TClientSocket连接,事件都要关联,我应该怎么做呢?
还望楼上指教!多谢!
 
那你就用组塞模式了,没有事件了,都要自己去控制流程
 
请问如何实现呀?能给例子吗?或者其它的解决方案都好啊!
 
你的进程代码是怎么写的呢???
贴出来可以不咯???
你捕捉到了什么错误没有呢???
呵呵~~~~~~~~~顶吧~~~~~~~~~~~~~~~
 
就是一个线程呀,在Execute中直接调用这四句代码呀!
 
试试阻塞模式,加上这一句:
CSocket.ClientType := ctBlocking;
 
是呀,可以了!但是怎样自己写事件呢?
 
给你个例子吧!
线程调用的过程,如下:
procedure ThreadConnectFJ.ClientExecute;
var
StrData: array[0..1023] of char;
Str: String;
SocketStream: TWinSocketStream;
begin
while not Terminated and CSocket.Socket.Connected then
try
SocketStream := TWinSocketStream.Create(CSocket.Socket, 10000);
try
FillChar(StrData, SizeOf(StrData), 0);
if SocketStream.Read(StrData, SizeOf(StrData)) = 0 then
begin
Terminate;
exit;
end else
begin
Str := StrData;
Memo1.Lines.Add('Client:Read:'+Str);
CSocket.Active := False;
Terminate;
exit;
end;
finally
SocketStream.Free;
end;
except
// something
end;

end;
 
谢谢了!
 
后退
顶部