首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

线程莫名终止,该如何解决

2012-02-21 
线程莫名终止 - C++ Builder / Windows SDK/API程序是用Thread Object创建1个线程线程里面功能是写数据库(

线程莫名终止 - C++ Builder / Windows SDK/API
程序是用Thread Object创建1个线程
线程里面功能是写数据库(MSSQL)和写INI文件以及重绘UI
为了仅供测试,没有涉及到读数据库和读INI文件,重绘UI用Synchronize

问题是,虽然用while(true)循环,但是还是会不经意的莫名终止这个线程
期间,我测试各式各样的操作,也不能总结到规律,后来就不操作,线程启动到莫名终止,都不进行任何操作,但是还是没有规律的终止

请僵哥或者大家帮我分析下,谢谢

[解决办法]
晕了,就说了这么几句,谁能解?
关键代码,重绘UI部分
[解决办法]
线程中会不会有堆栈溢出,或者线程是否有特定退出条件,检查一下代码...

[解决办法]
非必要的操作,个人不建议使用Synchronize切换到主线程进行UI操作,因为某些UI操作很难保证不会导致消息重入,而消息重入导致的问题是不可预知的。最好是把数据放到一个各线程都能够访问的全局列表当中,然后通过发送消息达到处理。
[解决办法]
既然仅是个测试,也没有读取数据库和INI文件,那就是你程序代码的问题。看你的执行代码是否真正包含在while循环体中了。
[解决办法]
先把while(true)里面的代码注释掉,再跑,或者只有这一句while(true);
先分出是线程内的问题,还是线程外的问题.
[解决办法]
你UI的控件是可见的,还是不见的?
我以前遇到过不可见的控件在线程中操作会出错的问题
[解决办法]
可能是你的代码在内存方面出了异常,用try捕获各种异常看看,另外在调试器的线程查看器里看出现异常的时候线程是否消失。
[解决办法]
你自己都还没确定出错的地段,又没出错的代码,如何判断?
用排除法,先找出出错的代码是哪段先吧。

[解决办法]
那是因为delphi的数据库控件不是线程安全的,
所以在对数据库进行操作时要用临界区(或互斥量等)
来保护一下操作数据库的代码

热点排行