奇怪的线程中问题,急! ( 积分: 100 )

  • 主题发起人 主题发起人 未来黑客
  • 开始时间 开始时间

未来黑客

Unregistered / Unconfirmed
GUEST, unregistred user!
在TThread类,动态生成一个控件,
但自定义它的过程,
procedure xx.sendit
begin
FSocket := TWSocket.Create(nil);
FSocket.OnSessionConnected := SocketSessionConnected;
FSocket.OnDataAvailable := SocketDataAvailable;
FSocket.OnSessionClosed := SocketSessionClosed;
FSocket.OnError := SocketError;
FSocket.Addr:=ip;
FSocket.Port :='25';
FSocket.Proto := 'TCP';
fsocket.Connect;

//问题就在下一行,如果我不加上,此线程的FSOCKET 就不工作,如果我加上,就一
切正常?这是为什么?不明白。。。。。
messagebox(0,'','she',0);
end;
 
在TThread类,动态生成一个控件,
但自定义它的过程,
procedure xx.sendit
begin
FSocket := TWSocket.Create(nil);
FSocket.OnSessionConnected := SocketSessionConnected;
FSocket.OnDataAvailable := SocketDataAvailable;
FSocket.OnSessionClosed := SocketSessionClosed;
FSocket.OnError := SocketError;
FSocket.Addr:=ip;
FSocket.Port :='25';
FSocket.Proto := 'TCP';
fsocket.Connect;

//问题就在下一行,如果我不加上,此线程的FSOCKET 就不工作,如果我加上,就一
切正常?这是为什么?不明白。。。。。
messagebox(0,'','she',0);
end;
 
新年好呀,
 
呵呵,我认为你添个sleep就可以了
messagebox正好起到了这个作用。。
我在神奇的广西就遇到类似情况的,我和同事的笔记本上程序运行都是正常的,但是到了其他的机子上或者用usb转接的串口全都不行,后来也是添了个messagebox调试时才发现这个问题的。。这可能与各个机子的性能有关吧。。
这是我所遇到过的最最郁闷的问题。。
 
被楼上的抢先了
这其实就是线程的在有些情况下不好用的地方
他不会等你的Connect结果
加Sleep也未必有用,因为不能确定要等待多久
加个while循环吧,退出条件为Connect成功
当然这样也有问题
如果是Connect失败可能形成死循环
还要设置计数器,给一个最大的循环数
 
看来线程中的问题,还真不少。我这里生成的控件是ICS 中的,
后来我用了winsocket
这个问题就没有了,(是用了循环)。会不会是ICS 控件有问题?
楼上二位朋友可以谈一下:
用API 创造的线程(其实很方便呀),如何对VCL 资源(如momo)进行访问,
有没有类是于Synchronize() 的方法或函数?

 
奇怪, 为什么要用线程? 看你用的socket都不像是阻塞的. 不管用ICS还是WinSocket它们都是基于消息的, 呵呵, 所以事件触发都是由一个主线程中的隐藏窗口发起的. 因此所有关于socket的处理其实都是在主线程中执行的. 你的线程除了create并初始化一下这个socket基本就是个废线程. 花十几毫秒创建一个线程就为了一个执行几毫秒的初始化有意义吗?
 
楼上的,你没看明白就不要乱说。
问题还是没明白。
 
我知道原因的. 呵呵...具体就不告诉你了.
问个问题都那么拽. 谁欠你了?
 
我换一个方法就完成了。不用你的吐沫了。。。在这里总是有你这样的人,回答问题我给你钱就不在欠你的了???
可恶!
 
多人接受答案了。
 
messagebox是依赖Application的,呵呵,我也碰到过,如果你想发信息出去,建议用SendMessage
 
后退
顶部