C++多个线程调用同一个dll中的一个函数,如何知道有多少个线程同时进入了这个函数体
C++多个线程调用同一个dll中的一个函数,怎么知道有多少个线程同时进入了这个函数体
C++多个线程调用同一个dll中的一个函数,但是要求这个函数同一时刻只能被有限个线程调用。因为这个函数使用了一些有限资源,当资源不够时,希望该函数直接返回。dll函数是用“C”方式导出的。抱歉,没多少分了,拜谢各位大神。
------解决方案--------------------
------解决方案--------------------
在DllMain中
fdwReason
为DLL_PROCESS_ATTACH时InitializeCriticalSection
为DLL_PROCESS_DETACH时DeleteCriticalSection
C++多个线程调用同一个dll中的一个函数,但是要求这个函数同一时刻只能被有限个线程调用。因为这个函数使用了一些有限资源,当资源不够时,希望该函数直接返回。dll函数是用“C”方式导出的。抱歉,没多少分了,拜谢各位大神。
------解决方案--------------------
CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);
int Limit4ThreadCalled() {
static DWORD ThreadIDs[4];
int it;
DWORD tid;
EnterCriticalSection(&cs);
tid=GetCurrentThreadId(VOID);
for (it=0;it<4;it++) {
if (ThreadIDs[it]==tid) break;
if (ThreadIDs[it]==0) {
ThreadIDs[it]=tid;
break;
}
}
LeaveCriticalSection(&cs);
if (it>=4) return 1;
//...
EnterCriticalSection(&cs);
ThreadIDs[it]=0;
LeaveCriticalSection(&cs);
return 0;
}
DeleteCriticalSection(&cs);
------解决方案--------------------
在DllMain中
fdwReason
为DLL_PROCESS_ATTACH时InitializeCriticalSection
为DLL_PROCESS_DETACH时DeleteCriticalSection