void InitWin32Threads() { // Already initialized? if(gNumWinThreads > 0) { return; } SetLastError(0); gNumWinThreads = GetProcessorCount(); if(gNumWinThreads >= MAXIMUM_WAIT_OBJECTS) gNumWinThreads = MAXIMUM_WAIT_OBJECTS; assert(gNumWinThreads <= kMaxWinThreads); // Create the synchronization events. for(int i = 0; i < gNumWinThreads; i++) { CHECK_WIN_THREAD_FUNC(gWinThreadWorkEvent[i] = CreateEvent(NULL, FALSE, FALSE, NULL)); } CHECK_WIN_THREAD_FUNC(gWinThreadStartEvent = CreateEvent(NULL, TRUE, FALSE, NULL)); CHECK_WIN_THREAD_FUNC(gWinThreadDoneEvent = CreateEvent(NULL, TRUE, FALSE, NULL)); // Create threads for(int threadIdx = 0; threadIdx < gNumWinThreads; threadIdx++) { gWinThreadData[threadIdx].state = eThreadState_WaitForData; CHECK_WIN_THREAD_FUNC(hThreadArray[threadIdx] = CreateThread(NULL, 0, CompressImageMT_Thread, &gWinThreadData[threadIdx], 0, &dwThreadIdArray[threadIdx])); } }
JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_GetProcessorCount(JNIEnv* env, jclass) { return GetProcessorCount(); }