时钟控件定时产生线程操作数据库,shi线程资源释放的问题(50分)

  • 主题发起人 主题发起人 灰云1
  • 开始时间 开始时间

灰云1

Unregistered / Unconfirmed
GUEST, unregistred user!
我开发了一个程序,由时钟控件定时产生一个线程查询数据库,并进行处理,
线程里有使用FREEONTERMINATE := TRUE;
但是好像线程资源并没有释放,运行一段时间后系统就会报‘存储空间不足,系统无法创建线程’,
然后程序就自动关闭!
请问这是为什么?如何解决??
 

线程,自己定义的变量有没有释放。
 
线程是有几个局部变量,不过都是一般的string或integer变量,好像没什么可以释放的啊
 
灰云1你好:
我好像碰见过此错误,有可能是时钟的问题,你看看在时钟事件里面
是否有ProcessMessages一类的语句,当时钟上次事件未处理完,这次事
件又触发时会报错。
希望对你有帮助。
 
帖一下你的代码?
 
检查你的线程处理函数里是否有
if terminated then
exit;
 
to Huzzz
我的时钟线程中没有ProcessMessages,而且10分钟产生一个线程,目前的处理也不多,所以
不大可能会在下次时间事件触发时上次还没有处理完。
 
你是怎么查询数据库的啊?我怀疑是查询数据库的控件没释放空间。
线程有没释放在DEBUG下打开线程窗口看看就行了嘛
 
我发现在THREAD的EXECUTE中将DATABASE连接一次, 再半闭一次时会
增另一个线程无法FREE, 这样我的程序循环跑的话, 结果是,无用的线程越来越多, 最后
会出现资源用尽的情况, 怎么办?
我用的是ACCESS库, 用ODBC连接, 不知为何,ACCESS在线程中不能用BED, 一用就出错
 
隔一段时间产生一个线程,可能是线程没有执行完成,第二个线程就产生了。应该换一种
方法。
 
我证实的现象,可以保证,前一个线程一定已FREE, 否则就不会产生新的线程, 检测是通
过GETTHREDEXITCODE来确保的.
 
我想一定是有线程没有完全FREE, 因为有数据库时, 只要一连接DATABASE就会生成7个新的
线程, 而这7个线程不一定能完全FREE, 不要以为DATABASE.CONNECTION=FALSE;
DATABASE.FREE
就可FREE掉它所产生的THREAD, 在家可以用有关线程工具可以看到, 你的程序时不时会有
线程未FREE. 这样时间一长, 不死才怪, 我现在与不知道如何做到安全可信, 以能7X24小时
正常运行, 有同仁可一起讨论.
 
关注中..........
 
后退
顶部