在程序中,设备异步不停的发送信息上来,我将接收到的信息存至一个TList中存放,并且使用了TRTLCriticalSection,另一个线程A也是不停的在执行,当判断这个TList.Count 大于0时,就将信息取出,进行分析后存至数据库。当然,这里也用到了临界区。但现在有这样的一个问题,程序运行了几天之后(有时候是一天,有时候是两三天),线程A就不执行操作了。我查看过,那个TList的count不断在上升,而线程A就是不处理

解决方案 »

  1.   

    你使用了临界区按道理应该是没问题的
    或者你试试线程同步或锁或者自己定义一个WaitFor
      

  2.   

    用ProceXP查看一下线程状态和堆栈,看线程是停在哪个地方,然后就好定位问题了。
      

  3.   

    当判断这个TList.Count 大于0时,就将信息取出,进行分析后存至数据库
    还有这里,你是不是一次只处理了一条?只处理一条的话肯定会有遗留下来的
      

  4.   

    线程A
    while not Terminated do
    begin
    end;
    那个队列是通过设备回调函数传上来的数据增加进去的。就算我只处理一条也没关系的啊,我从这队列取出一条赋给一个变量,然后就从这个队列里删了它的。然后再慢慢去处理这条数据的
      

  5.   

    更新数据和界面时,要加同步(Synchronize)。系统异常后,线程会挂起。
      

  6.   

    我在这个线程里面有执行一个过程,而这个过程里有加另一个临界区对另一个线程的TList进行操作。
    我这个线程调用那个过程的时候才有更新数据和界面的,这也需要加Synchronize吗?
    如果挂起了,那又要如何判断和恢复?
      

  7.   

    写多线程一定要用ProceXP,看到线程状态和堆栈就很好定位,就知道线程卡在什么地方了?还可以通过MAP地址找到代码行。