各位大侠,本人碰见这样一个问题,多个thread同时去调用一个DLL,完成一个功能,但是发现啊,如果是thread的数目较少,如4个左右,就没有什么问题,但是数量一旦多了,比如6个或者7个,就有的thread总是无法正常的调用DLL.不知道大家有没有碰见过类似的问题啊?谢谢啊!我考虑过那些static的变量和class,但是没有什么头绪
解决方案 »
- CMFCShellListCtrl 显示的我的电脑
- vs2008 cannot open file mfc80ud.lib?
- * 有什么捷径: 可以判断用户在CPropertyPage界面上改变了设置? *
- 请问如何可以让窗口比屏幕大
- 关于自己制作一个界面库的可行性研究!
- Folder.htt、desktop.ini影响速度问题
- 请问怎样设置无标题栏的对话框为可拖动的?
- 哪位朋友有读取cmos里的时间的代码呀,(声明:我不会用vxd)
- 小弟不才!!!请问各位大虾如何跨到VC++这一步的,学了C++以后,如何向VC++进军!!!
- 日期和时间问题
- 如何把图片显示到对话框上?高手来帮帮我啊?
- 半年了,"关于excel复制和删除sheet的问题"还没解决!!!!
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;};