因为查询的需要等待,所以希望做成可以N个线程并发查询。
线程:
void __fastcall QueryThread::Execute()
{

       try{
                MainForm->ADOQuery1->Open();
                if(MainForm->ADOQuery1->Active){
                MainForm->ADOQuery1->DisableControls();
                while(!MainForm->ADOQuery1->Eof )
                {

问题:
1.无法同时(同步)new 2个线程,对主程序中的ADO控件(MainForm->ADOQuery1)进行操作。
2.在线程中定义ADO控件(ADOQuery、ADOConnect)编译通过,运行出错!各位有什么良测?

解决方案 »

  1.   

    最好在子线程中动态生成ADOQuery、ADOConnect控件.如果多个线程使用主线程的同一组ADO控件,就算是用临界区控制了安全,并发操作效率还是不高.
      

  2.   


    magicsnake(北极狐) :动态生成ADOQuery、ADOConnect控件,如何NEW? dht96050511(寇仲) :什么是“临界区”?
      

  3.   

    TADOConnect * conn = new TADOConnect(this);
    conn->ConectionString="连接字符串";
    conn->Open();
    TADOQuery *query = new TADOQuery(this);
    query->Connection = conn;
    query->SQL->Clear();
    query->SQL->Add("查询字符串");
    query->Open();
    // 将结果反馈到主界面
    query->Close();
    query->Free();
    conn->Close();
    conn->Free();
      

  4.   

    在线程中TADOQuery *query = new TADOQuery(this);编译出错:[C++ Error] QueryThread.cpp(36): E2285 Could not find a match for 'TADOQuery::TADOQuery(TQueryThread * const)' 
    [C++ Error] QueryThread.cpp(73): E2451 Undefined symbol 'ADOQuery' 
    什么原因?
      

  5.   

    线程使用ADO 应该要设置套间模型吧~