一个多线程的问题。(200分)

E

e_ceo

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要程序启动的时候创建了很多线程,这些线程在程序运行期一直存在。
界面上每个按钮的事件都是放在线程里面执行的。
创建的时候调用Suspend
按钮点击事件里调用Resume
现在的问题是:第一次点击按钮,线程正常运行,以后线程就不运行了
 
事件可以放在线程里吗?
一般的做法是事件放在主线程里,然后在每个事件里Resume特点的线程啊!
你想完成什么?
 
IF you terminate the thread you must create thread again.
 
使用ADO同时连接多个数据库统计数据,每个线程是与数据库建立的一个连接,连接建立之后保持常连接,所以要求线程Execute()多次执行。
 
把代码贴出来看看
 
没有啊,每个线程的FreeOnTerminate属性都设置为false的。
 
我也怀疑是你线程写的有问题,执行一次就TERMINATE了,把代码贴出来看看。
 
把线程应用程序写入注册表“启动”里,只要机子运行就行了!
只要创建一个线程就好了,在线程的create事件中创建线程内部的数据连接,以后用这一个连接就可以了!
在线程的Execute中处理数据,不要挂起线程;
如果要触发按钮的事件,我看是不行的!只有把它们都弄到线程中去处理!
总的来说,你的线程写的有问题!
 
将FREEONTERMINATE设为FALSE并不能使线程在运行期一直有效的。
你如果想实现这个功能,必须在execute中进行处理,写一个循环,用SLEEP来控制间隔;如果是NT SERVICE可以用ServiceThread来控制循环
 
一个线程创建后不可能向你想的那样执行多次Execute,只能在开始的时候执行一次
以后只能Suspend、Resume了,除非该线程已经Terminate了。我想你是不想Execute的,
因为Execute相当于又建了一个线程!但是要达到不Terminate线程,又能好像重头开始
执行线程那样的效果(是不是你要的),也是可以的,要用Waitforsingleobject之类的,
不过我想还不如就每次都完了Terminate、开始就Execute的好!方便嘛!并且你是由
Button在界面上控制的,肯定不需要考虑线程的开销。请:
事件放在主线程里,然后在每个事件里Execute线程!
 
如:
procedure a_thd.execute;
begin
while truedo
begin
try synchronize(do_ado);except end;
sleep(1000*60);
end;
end;
 
好像就是这样的,我弄了一个小程序测试的结果好像就是这样的。
 
我估计你execute中并非一个循环,一下就执行完,并且结束了该线程
 
谢谢大家了
我的难度在于,我想保持一些数据,如果在每次执行完毕就断开的话,很多需要保存的信息丢掉了,比如,数据库的连接,用户上一次统计的选择条件,等信息。所以我想实现在
Execute函数里执行多次query。execsql。现在看来要想想别的办法了。
 
顶部