2015-12-11 5 views
2

У нас есть серверное приложение C++ COM, из которого пользователь может выбирать и запускать собственные процессы. Я хочу добавить функцию «Сборочность процессора» в приложении запуска.Программно установить аффинность процессора для приложения

Клиент имеет систему с несколькими процессорами (2 физических процессора). Пользователь предоставит физический номер процессора, либо 1, либо 2. Прикладной пусковой установщик должен установить близость процессора к своим приложениям на основе ввода пользователя. если они дают номер процессора как 2, тогда приложения, запускаемые из пусковой установки, должны использовать ЦП 2.

Как вычислить маску аффинности процессора (на основе ЦП)?

Это приложение запуска должно работать в 32-разрядных и 64-разрядных машинах Windows XP. Также тип процессора может отличаться от машины к машине (Intel, AMD или другие).

Приложение разработано как сервер COM (C++).

Пожалуйста, предоставьте мне хорошее решение.

+1

... вычисляет маску только немного вы застряли на? – immibis

+0

Вы читали [документы MSDN в функции SetProcessAffinityMask?] (Https://msdn.microsoft.com/en-us/library/windows/desktop/ms686223 (v = vs.85) .aspx) – user4581301

ответ

1

Не уверен, что ваш вопрос хотел бы получить номер процессора или установить его

//To get the CPU 
HANDLE hProcess = GetCurrentProcess(); 
SYSTEM_INFO SystemInfo; 
GetSystemInfo(&SystemInfo); 
unsigned int nMaxProcessorMask = (1 << SystemInfo.dwNumberOfProcessors) - 1; 
// Set the max processor mask 
SetProcessAffinityMask(hProcess, nMaxProcessorMask); 
+0

В соответствии с MSDN, маску сродства процесса представляет собой бит-вектор, в котором каждый бит представляет собой логический процессор, на котором разрешены потоки процесса. – aathi

+0

Согласно MSDN, маску сродства процесса представляет собой бит-вектор, в котором каждый бит представляет собой логический процессор, на котором разрешены потоки процесса. Но мне нужно установить маску аффинности процесса как бит-вектор логических процессоров для конкретного физического ЦП. т.е. если машина содержит два физических процессора (например, CPU 1 и CPU 2). Мне нужно установить маску сродства, на которой бит представляет только для логических процессоров ЦП 2. – aathi