当前位置:首页 » 多媒体相关

[★★★]问一个关于多线程编程的问题


在一个线程中实现数据库查询,完成查询之后自己释放。  
  主窗口需要知道此线程的查询是否完成,该如何判断呢?

推荐阅读

  • Windows XP操作系统30招网络技巧 [详细内容]
  • 魅族miniplayer进化 M6se即将上市魅族 meizu miniplayer 1G闪存MP3 [详细内容]
  • 囊括两项大奖!海尔电脑载誉IT两会 [详细内容]
  • 最新的五则Win XP系统应用技巧 [详细内容]
  • 对停留在耳机情景无法改回的现象的解决方法 [详细内容]
  • 工程样机也不俗 海尔 MAF-I99评测闪存MP3 [详细内容]
  • 让Win XP系统性能更优越的四招技巧 [详细内容]
  • 网友回答:
    网友:tonylk

    做一个回调函数,在线程结束时,让线程调用主窗体中能够的该函数。

    网友:goldflute

    我认为:基本上用bcb做多线程的东西尤其是用vcl时是很费劲的。

    网友:jiangshx

    可以试试用下面的方法:  
          bool   stopflag;//判断查询是否结束  
          void   messdetect()//  
          {  
              msg   mess;  
              while(::peekmessage(&mess,null,0,0,pm_remove))   {  
                  ::translatemessage(&mess);  
                  ::dispatchmessage(&mess);  
                  }  
          }  
       
          用sendmessage函数在数据库查询线程中发送一个自定义消息wm_user1;  
          hwnd   hwnd;  
          copydatastruct   cpd;  
          ......  
          ::sendmessage(hwnd,wm_user1,null,(lparam)&cpd);  
           
          再做一个wm_user1消息的处理函数,  
          void   __fastcall   tform1::win_user1(tmessage   &message)  
          {  
              ......  
              stopflag=true;//查询结束  
              ......  
          }  
          主线程中可以如下:  
          ......  
          stopflag=false;  
          if   (_beginthread(newthread,4096,null)   ==   -1)   return;//开始新线程  
          while(1){  
              messdetect();//等待查询结束  
              if(stopflag)break;  
              }  
          ......

    网友:lancex

    线程的查询完成时给主窗体发个消息也可以实现。  
      sendmessage(main->handle,wm_yourdefine,1,0);  
       
      主窗体中处理此消息  
      .h  
      public:  
              void   __fastcall   yourfunc(tmessage&   msg);  
              begin_message_map  
                  vcl_message_handler(wm_yourdefine,   tmessage,   yourfunc)  
                end_message_map(tform);  
       
      .cpp  
      void   __fastcall   main::yourfunc(tmessage&   msg)  
      {  
                if   (((int)msg.wparam)==1)  
      ....  
                //your   process  
      }  
     

    网友:woainihaha

    sendmessage

    .

    讨论区

    Login