2009-05-18 17 views
6

Bir Windows platformunda yönetilmeyen C++ kullanarak, ana bilgisayarımın işlemci çekirdeklerinin sayısını saptamanın basit bir yolu var mı?Sayım İşlemcileri Windows altında C++ kullanarak

+5

İlgili soru: http://stackoverflow.com/questions/150355 – macbirdie

+0

[Programlı bir makinede çekirdeklerinin sayısını bulmak] (olası yinelenen http://stackoverflow.com/questions/150355/programmatically- – sschuberth

cevap

11

Gereksinim duyduğunuz bilgileri almak için GetLogicalProcessorInformation kullanabilirsiniz.

ETA: Bir yorumcu bağlı söz konusu belirtildiği gibi

, başka (daha kolay) yolu GetSystemInfo yoluyla olacağını yapmalı:

SYSTEM_INFO sysinfo; 
GetSystemInfo(&sysinfo); 

numCPU = sysinfo.dwNumberOfProcessors; 

size daha ayrıntılı bilgi verecek GetLogicalProcessorInformation gibi görünüyor, ama ihtiyacınız olan tek şey işlemci sayısı ise, GetSystemInfo muhtemelen iyi çalışır.

+0

Sadece doktor siparişi ne işliyor, bir tedavi çalışıyor. Teşekkürler! –

2

Ben XP NUMBER_OF_PROCESSORS değişken bir ortam var fark ettik ama Microsoft'un sitesindeki bulamadım. Yine de bunun en kolay yol olacağını düşünüyorum.

0
size_t getProcessorCores() 
{ 
    DWORD process, system; 
    if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system)) 
    { 
     int count = 0; 
     for(int i = 0; i < 32; i++) 
      if(system & (1 << i)) 
       count++; 
     return count; 
    } 
    // may be we hav't PROCESS_QUERY_INFORMATION access right 
    SYSTEM_INFO sysinfo; 
    GetSystemInfo(&sysinfo); 
    return sysinfo.dwNumberOfProcessors; 
} 

size_t getAvailableProcessorCores() 
{ 
    DWORD process, system; 
    if(GetProcessAffinityMask(GetCurrentProcess(), &process, &system)) 
    { 
     int count = 0; 
     for(int i = 0; i < 32; i++) 
      if(process & (1 << i)) 
       count++; 
     return count; 
    } 
    // may be we hav't PROCESS_QUERY_INFORMATION access right 
    SYSTEM_INFO sysinfo; 
    GetSystemInfo(&sysinfo); 
    return sysinfo.dwNumberOfProcessors; 
} 
İlgili konular