线程是CPU分配时间片的基本单位,对CPU来说,你的主线程和查询线程应该是一视同仁的,我想可能是你的代码有问题,我推测可能是:
一.你的查询过程根本没有放在副线程中,还是在主线程中实现的。
二.你的查询代码确实是在副线程中实现,但是使用了非耗时的循环,这时你可试着在循环中放入一个Sleep(n)之类的语句,把CPU让给你的主线程一会儿。以上是我的个人看法,本人才疏学浅,还望多交流!

解决方案 »

  1.   

    我做过一些用子线程访问数据库的程序,也没有向lzzqqq所说的加上Sleep之类的语句,主线程仍然可以很轻松地响应事件。因为在访问数据库时很多时间都消耗在访问远程数据库服务器上了,并没有占用多少CPU时间。
    我想楼主的问题应该是出在代码的逻辑上,最好把代码贴出来看看。
      

  2.   

    在用TThread对象写多线程的应用时有一点一定要注意:
    TThread对象提供了一个Synchronize方法来完成操作的串行化,但它是利用消息机制把操作转移到主线程中去执行的,只适合于操作时间较短(与子线程的总运行时间相比)的情况。如果可能导致数据访问冲突的操作所占的时间较长,不要用这种方法去串行化,而要改用TCriticalSection或TMultiReadExclusiveWriteSynchronizer去解决冲突。
      

  3.   

    我觉得lzzqqq(Jonersen) 的说法有道理,我做的多线程查询和单线程查询的效果就是不同,你可能是代码并没有放在线程中,或是线程存在同步之类的问题!