69,371
社区成员
发帖
与我相关
我的任务
分享
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
// pointer to security attributes
LONG lInitialCount, // initial count
LONG lMaximumCount, // maximum count
LPCTSTR lpName // pointer to semaphore-object name
);
用Semaphore控制线程访问的个数。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);