问题帖子:http://topic.csdn.net/u/20120923/23/ebcf7e71-8e4a-4fd6-b849-0dd9b800c8d4.html    按照大家提供的一个方法,打印程序中的信息。通过跟踪,发现到后来是由于数据处理线程(dealthread)得不到执行造成的,如:线程在2012-10-02-21-26-49时在运行,之后一直没能执行,直到2012-10-02-22-44-28才又得到执行,而且我确定正常情况下,此处理线程应该一直在执行。但是我不知道如何解决此问题。 
    在程序中我将数据处理线程的优先级设置为tplower(线程优先级比正常低1点),有可能是此处造成的问题,当主线程一直忙时,数据处理线程得不到执行,但是将其设为正常优先级的话,主线程接收数据的线程很多数据都没能放入队列中......  
   望高手们能提供些建议

解决方案 »

  1.   

    看看置顶的帖子:[置顶] 线程!线程!!线程!!!(Delphi版) 
    http://topic.csdn.net/u/20110217/11/56577c65-2e77-4f8f-b541-0be47cdb4d60.html?46037
      

  2.   

    把你的代码贴出来,你确定是线程优先级引起的,你把你的应用中加上CPU空闲执行过程打印下看看是什么情况,
      

  3.   

    Application.OnIdle这个是应用空闲所执行的过程你打印看下,如果线程得不到执行但空闲处理过程得到执行应该是你的线程处理有问题。
      

  4.   

    我主线程用来接收数据,将数据放进队列;解析线程用来从队列中取数据,并进行解析,在对队列访问时加上临界区了.....    WRclient.Acquire;
        try
         truedata:=tmpDataArea.popData;
        finally
         Wrclient.Release;
        end;
      

  5.   

    落伍了啊,这是什么东东WRclient.Acquire;我都不认识了数据队列要保证任何时刻只能有一个线程访问,包括主线程,不知道你这个是不是了。
      

  6.   

    呵呵,谦虚了,其实是我没写全,WRclient:TCriticalSection;
    我认为我是做到这一点了,其实我也是怀疑此处的问题,找造成此问题的原因,不过还是没能解决问题......
      

  7.   

    为什么我的程序在解析线程运行时,Application.OnIdle一直都能得到执行呢?
      

  8.   

    感觉应该是处理同步时出错了!造成数据处理无法正确加入队列
    建议还是考虑一点点的看下线程内部是否有操作全局变量或者VCL控件吧。
    记着使用临界区