线程中控件的忙事件为什么仍会造成主程序无法正常响应鼠标事件。(20分)

  • 主题发起人 主题发起人 Boblee
  • 开始时间 开始时间
B

Boblee

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个控件是有关联网的,这个控件恶心的地方就是网络一断开就会一直尝试联接除非你
结束程序或网络重新联上了。于是我把这个控件的建立与运行都用一个线程来处理,但网络一断开,它仍会造
成主线程没响应。我就觉得奇怪了,为什么子线程的忙仍会造成主程序没响应?
 
TThread的同步调用?
 
没有同步调用。
 
可不可以列段代码说明同步调用?
多谢!
 
如果实在没辙,就动态创建,一断开就free掉
 
我就是动态创建。
 
看表现最可能是下面原因造成的:
线程是在synchronize中调用连接的,因为synchronize是在主进程时间片内运行的, 所以拖死了程序
 
那该怎么解决。
 
cpu执行程序是分时间片的,轮流执行的,同步的意思只是cpu轮流执行,并不是说就是同步
一起执行的,而是各执行一段时间片,到一个时间片没执行玩就跳到另一个时间片,执行另外
的东西.具体情况,我也不是很清楚
 
那个线程在断线后有频繁的某种操作,占用了大量的cpu时间。
 
如何知道“断线后有频繁的某种操作,占用了大量的cpu时间”的某种操作?
那个控件,只要网络重新联上,它马上就好了。
 
把包含那个控件的线程的优先级设为tpIdle试试看。
 
To 特尔斐:
还是不行。:(
 
可能是控件的bug,太占资源。
 
强行结束它! TerminateThread();
虽然说这可能造成内存浪费,但是比起你的拖死 CPU 来说,还是好点。
 
加上Application.ProcessMessages();试试
 
>强行结束它! TerminateThread();
这不是我想要的结果。因为我是对它进行二次开发的,所以我想找出原因。而这个控件是
跟硬件一起了,还没法可找替换的。
 
你看一下是否有超时一说,如果没有,你就需要自己做个超时了。
 
试一下以下两种方法:
1.隔一定时间再进行重连;
2.在线程的Execute中,添加Application.ProcessMessages()以响应主程序的事件
 
后退
顶部