各位大侠,本人碰见这样一个问题,多个thread同时去调用一个DLL,完成一个功能,但是发现啊,如果是thread的数目较少,如4个左右,就没有什么问题,但是数量一旦多了,比如6个或者7个,就有的thread总是无法正常的调用DLL.不知道大家有没有碰见过类似的问题啊?谢谢啊!我考虑过那些static的变量和class,但是没有什么头绪

解决方案 »

  1.   

    就是我现在有一个做好的DLL 文件,给上边的应用层调用,4个以下的thread调用的时候没有什么问题,但是一旦调用的人多了,就出现问题了,这就是我得问题
      

  2.   

    CRITICAL_SECTION m_cs;
    EnterCriticalSection(&m_cs);可以线程安全的,操作你的变量LeaveCriticalSection(&m_cs);或者可以使用下面的类:
    class CLock
    {
    public:
    CLock(CRITICAL_SECTION& cs, const CString& strFunc)
    {
    m_strFunc = strFunc;
    m_pcs = &cs;
    Lock();
    }
    ~CLock()
    {
    Unlock();
    }#ifdef _DEBUG
    BOOL m_bTrace;
    CLock(CRITICAL_SECTION& cs, const CString& strFunc, BOOL bTrace)
    {
    m_strFunc = strFunc;
    m_pcs = &cs;
    m_bTrace = bTrace;Lock();
    }
    #endifvoid Unlock()
    {
    LeaveCriticalSection(m_pcs);#ifdef _DEBUG
    if( m_bTrace )
    #endif
    TRACE(_T("LC %d %s\n") , GetCurrentThreadId() , m_strFunc);
    }void Lock()
    {
    #ifdef _DEBUG
    if( m_bTrace )
    #endif
    TRACE(_T("EC %d %s\n") , GetCurrentThreadId(), m_strFunc);EnterCriticalSection(m_pcs);
    }
    protected:
    CRITICAL_SECTION*m_pcs;
    CStringm_strFunc;};