我是第一次用delphi的线程,有个简单问题想请教大家,我在主窗体上执行一个数据库查询操作,可能很耗时,会把界面冻住,我就创建一个线程到后台执行查询,那么我的主线程怎样知道查询线程执行完毕了呢,我现在使用的方法是开始设置一个全局变量,开始查询前先复位,然后在查询线程中,查询完数据库后则把该变量复位,在主窗体上起一个定时器,不停的去查询该变量的状态,来判断查询线程是否执行完毕,我感觉这种做法不太好,效率也不高,请大侠们提供一些高效率的、常用的方法。

解决方案 »

  1.   

    我一般都不用线程查询,处理烦啊,优化一下你的SQL语句行不?
      

  2.   

    timer時間設久一點,應該不太耗資源的
      

  3.   

    sql语句已经没有办法优化了,因为有时候返回的记录数可能上百万条,用timer时关键要用processmessage刷新界面,这个好像挺耗时的
      

  4.   

    timer确实很浪费资源的 processmessage也很花费时间但是我通常是这么做的 我没有什么样的好办法 但是也很关注
      

  5.   

    数据大的情况下,我个人认为用线程查询最好
    把sql语句优化一下
      

  6.   

    用WaitForSingleObject检查该进程是否结束。
      

  7.   

    WaitForSingleObjec,是不是也必须在主线程起一个定时器,不停的去查询状态啊,不过它的效率应该高一些,我找到一个方法,用发消息postmessage通知主线程,我是在线程的Execute执行完后,用postmessage给主线程发一个消息,这样主线程不用去自己判断了,收到消息后就知道线程执行完毕,我经过试验还比较好用,不知道这样做有没有什么隐患???
      

  8.   

    CreateThread()API函数中的参数  LPTHREAD_START_ROUTIN lpStartAddress
    //开始执行线程的函数的地址,只要这个函数一退出,线程就结束,这个函数为TreadProc