在这个子线程的入口静态函数里面调用了下面的代码:
extern CDatabase m_dbConn;
CRecordset rs(&m_dbConn);
sprintf(cExistRecord,"select * from downRegist where downflag=0");
bOpen =rs.Open(CRecordset::snapshot,cDownflag);
if(Bopen==false)..
else ..
我想问:这段代码在其他地方(主线程)里面能正确RUN,为什么在一个静态函数里面就不行 啊?到底要如何改进它?

解决方案 »

  1.   

    extern CDatabase m_dbConn不要,把m_dbConn作为LPVOID参数行不行
      

  2.   

    答复“ xtuzi(雨人) (”
    ”extern CDatabase m_dbConn不要,把m_dbConn作为LPVOID参数行不行“
    我当然没有把m_dbConn作为入口的参数啊!
    而且,我只是“rs.Open(CRecordset::snapshot,cDownflag);”啊
    我用CCriticalSection的lock()和unlock()也不行啊!
      

  3.   

    我用了以下代码来保证互斥:
    在子线程的入口函数里面,我调用了下面这个函数。
    void Fun()
    {
    CCriticalSection cs;(这个cs不是类的成员变量,而是局部变量)
    cs.Lock();
    CRecordset rs(&m_dbConn);
    sprintf(cExistRecord,"select * from downRegist where downflag=0");
    bOpen =rs.Open(CRecordset::snapshot,cDownflag);
    cs.Unlock();
    }
    老是出现“连接占线导致另一个hstmt”错误,但是:我改用一个全局的CCriticalSection就解决这个问题了!
    但是:我把CCriticalSection定义为这个类的成员变量,无论怎么样都编译通不过,我已经加了头文件#include"afxmt.h",是否是因为该入口函数是静态函数的原因?
      

  4.   

    烦躁,这个问题还是没有解决!它有时候正常,但有时候又出问题,谁可以HELP 我啊?
      

  5.   

    好象用CCriticalSection不行,但用CMutex又可以,真看不懂啊,这2种方法没有什么太大的区别吧?