我在程序里面 启动一个线程, 这个线程是对一个表由头到尾地处理数据。 但是我想停止这个线程,好像停止不了的?反而暂停和继续就行。请问是什么问题? 谢谢!
解决方案 »
- 取得dbgrid1连接的表名
- delphi中使用xmlhttp的问题。
- delphi能做多久?
- 如何把窗体,始终居于前段?
- !!!!!!!赶在五一的之前升级了,祝朋友们五一快乐 7!!!!!!!!
- 如何设置AdoDataset中的浮点数字段长度
- 求教一算法:从一个二维数组A[0..5,0..10]COPY出一个二维数组B,要求COPY时将数组A中所有全0行删除。
- BDE中的QUERY怎么实现自动登录数据库?
- 请教高手:Delphi中获得光盘容量,光盘所在文件数和目录数,卷标的函数有哪些?
- xlzps(空瓶子)老兄这边请!
- 控件cxlookupComboBox问题
- 诚心!!!! 请教ado多线程问题!!!!.......
我需要把他 MyThread.free 和 MyThread.destroy 吗?我执行了以上操作了,但是关闭窗体报错。
不知道是否由于线程没有处理好。还有,我用了线程,执行完线程的操作后 会报: Error creating window device context ,这个错不是每次都报,请问由是什么原因?
我需要把他 MyThread.free 和 MyThread.destroy 吗?
----------------------------------------------------------
对,线程还没释放,你需要在外面把它释放掉;或者把其FreeOnTerminate属性设置成true也可以。
不都是楼主(kciv )一个人吗?
我需要把他 MyThread.free 和 MyThread.destroy 吗?
----------------------------------------------------------
对,线程还没释放,你需要在外面把它释放掉;或者其FreeOnTerminate属性设置成true也可以。
问题是,有些情况是不能等到线程完成我就想把它关闭啊,如果其FreeOnTerminate属性设置成true,是要等到线程结束才释放的吧?
------------------------------------------
你把它terminate了,不就结束了?然后FreeOnTerminate就有用了。当然你想随时停的话,Execute里的循环必须要能做到随时检查Terminated标记才行,或者使用其它方法以让程序能检测到此标记。
----------------
所以我现在比较习惯在窗体上进行线程释放,Free之前先来个WaitFor,保证窗体等待线程释放完后再释放。不过overflow错误估计是由你的线程内部引起的(我不知道具体实现),一般出现循环调用,导致内存急剧增加,就有可能stack overflow
又有一个新问题了。调用线程,运行了一下,报错:Project Projec2.exe raised exception class EAccessViolation with message 'Access violation at address 004E0F64 in module'Project2.exe'.Read of address 00000028'. Process stopped.Use Step or Run to continue.在我的笔记本没有这个问题,我的笔记本是单核cpu 。在台式机是双核的,不知道跟这个有关系吗?我试了双cpu的也报这样的错。
我在ClientExecute{相当于TThread的Execute}里面终止线程
参考代码:
while (not Terminated) and ClientSocket.Connected do
begin
......
if ReadText = Key_clt[4] then
Terminate;
end;