我用了以下代码来保证互斥:
在子线程的入口函数里面,我调用了下面这个函数。
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 g_cs就解决这个问题了!
但是:我把CCriticalSection m_cs定义为这个类的成员变量,无论怎么样都编译通不过,我已经加了头文件#include"afxmt.h",是否是因为该入口函数是静态函数的原因?

解决方案 »

  1.   

    CCriticalSection cs当然要定义为全局变量了
    局部的是不稳定的,很难知道他创建和释放的时间至于入口函数,我不知道
      

  2.   

    可以用以下API代替 CCriticalSection 。void InitializeCriticalSection( 
    LPCRITICAL_SECTION lpCriticalSection );void EnterCriticalSection( 
    LPCRITICAL_SECTION lpCriticalSection ); void LeaveCriticalSection( 
    LPCRITICAL_SECTION lpCriticalSection );