timsky
Цитата:
Заинтересовало У меня на одной из машин установлен процессор с технологией "hyper-threading" (с программной эмуляцией второго ядра). В общем вот, что получилось:
Код: #include <WinAPI.au3>
Global Const $PROCESS_ALL_ACCESS = 0x1F0FFF
$sPID = Run("notepad.exe")
ProcessWait($sPID)
$hProc = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, False, $sPID)
$aRet = _WinAPI_GetProcessAffinityMask($hProc)
MsgBox(0, "", $aRet[0] & @LF & _
$aRet[1] & @LF & _
$aRet[2] & @LF) ;Смотрим, что нам вернула функция _WinAPI_GetProcessAffinityMask, если индексы 1 и 2 равны 1, _
;то значит процессор одноядерный и дальнейшие телодвижения бессмысленны
;_WinAPI_SetProcessAffinityMask($hProc, 0x01) ;Задаём соотвествие для 1-го ядра
;_WinAPI_SetProcessAffinityMask($hProc, 0x02) ;Задаём соотвествие для 2-го ядра
_WinAPI_SetProcessAffinityMask($hProc, 0x03) ;Задаём соотвествие для обеих ядер
_WinAPI_CloseHandle($hProc)
Цитата:
Появилась необходимость привязки процесса к определенному ядру.
Заинтересовало У меня на одной из машин установлен процессор с технологией "hyper-threading" (с программной эмуляцией второго ядра). В общем вот, что получилось:
Код: #include <WinAPI.au3>
Global Const $PROCESS_ALL_ACCESS = 0x1F0FFF
$sPID = Run("notepad.exe")
ProcessWait($sPID)
$hProc = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, False, $sPID)
$aRet = _WinAPI_GetProcessAffinityMask($hProc)
MsgBox(0, "", $aRet[0] & @LF & _
$aRet[1] & @LF & _
$aRet[2] & @LF) ;Смотрим, что нам вернула функция _WinAPI_GetProcessAffinityMask, если индексы 1 и 2 равны 1, _
;то значит процессор одноядерный и дальнейшие телодвижения бессмысленны
;_WinAPI_SetProcessAffinityMask($hProc, 0x01) ;Задаём соотвествие для 1-го ядра
;_WinAPI_SetProcessAffinityMask($hProc, 0x02) ;Задаём соотвествие для 2-го ядра
_WinAPI_SetProcessAffinityMask($hProc, 0x03) ;Задаём соотвествие для обеих ядер
_WinAPI_CloseHandle($hProc)