| 
					
				 | 
			
			
				@@ -4341,18 +4341,35 @@ unsigned char SystemInformationImplementation::GetAPICId() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void SystemInformationImplementation::CPUCountWindows() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if defined(_WIN32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  std::vector<SYSTEM_LOGICAL_PROCESSOR_INFORMATION> ProcInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   this->NumberOfPhysicalCPU = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   this->NumberOfLogicalCPU = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  typedef BOOL(WINAPI * GetLogicalProcessorInformationType)( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  static GetLogicalProcessorInformationType pGetLogicalProcessorInformation = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (GetLogicalProcessorInformationType)GetProcAddress( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      GetModuleHandleW(L"kernel32"), "GetLogicalProcessorInformation"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!pGetLogicalProcessorInformation) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Fallback to approximate implementation on ancient Windows versions. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    SYSTEM_INFO info; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ZeroMemory(&info, sizeof(info)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GetSystemInfo(&info); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->NumberOfPhysicalCPU = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      static_cast<unsigned int>(info.dwNumberOfProcessors); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this->NumberOfLogicalCPU = this->NumberOfPhysicalCPU; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  std::vector<SYSTEM_LOGICAL_PROCESSOR_INFORMATION> ProcInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     DWORD Length = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    DWORD rc = GetLogicalProcessorInformation(NULL, &Length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    DWORD rc = pGetLogicalProcessorInformation(NULL, &Length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert(FALSE == rc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (void)rc; // Silence unused variable warning in Borland C++ 5.81 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert(GetLastError() == ERROR_INSUFFICIENT_BUFFER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ProcInfo.resize(Length / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    rc = GetLogicalProcessorInformation(&ProcInfo[0], &Length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    rc = pGetLogicalProcessorInformation(&ProcInfo[0], &Length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     assert(rc != FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (void)rc; // Silence unused variable warning in Borland C++ 5.81 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 |