我在程序里面 启动一个线程, 这个线程是对一个表由头到尾地处理数据。 但是我想停止这个线程,好像停止不了的?反而暂停和继续就行。请问是什么问题? 谢谢!
解决方案 »
- 如何在memo里面另起一行
- 关于数字转为26个字母的位置---------这个函数还有问题
- 调查:这里有多少是delphibbs过来的哈
- 焦头烂额一个上午还是搞不定,跪地相求大家,朋友帮忙啊。。。
- 我是初学者,写了段复制文件的代码,我知道还有很多地方不合理,所以想请大家指点一下,可以的话请给小弟一点意见!谢谢!
- 为什么ADOQuery删不掉记录?
- 一开始就浮动的工具栏怎么实际
- 数据库的内容存到文本文件里的问题
- 请教:读取EXCEL中某列的值时,如果该列设置了自定义的格式,怎么处理?
- 请问:如何监控网卡ip地址的变化?
- 控件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;