Что нового

Изменение ядер процессора на поцесс

k790

Новичок
Сообщения
239
Репутация
1
Здравствуйте, помогите пожалуйста, понадобилось сделать так, чтобы программа использовала только 1 ядро процессора.

Поискал, почитал и всё упирается в WinAPI_SetProcessAffinityMask, никак не получается задать соответствие.

А что такое handle?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AutoIt и так использует только одно ядро.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
k790
Вроде так:

Код:
#include <WinAPI.au3>
#Include <Constants.au3>
$sPID = Run("notepad.exe")

$hProc = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, False, $sPID)

;_WinAPI_SetProcessAffinityMask($hProc, 0x01) ;Set affinity for 1-st core
;_WinAPI_SetProcessAffinityMask($hProc, 0x02) ;Set affinity for 2-nd core
;_WinAPI_SetProcessAffinityMask($hProc, 0x03) ;Set affinity for both cores
_WinAPI_SetProcessAffinityMask($hProc, 0x09) ;Set affinity for both cores

_WinAPI_CloseHandle($hProc)


Это, насколько я помню, задает для процесса ядра №0 и №3
 
Автор
K

k790

Новичок
Сообщения
239
Репутация
1
WSWR
Ооо, спасибо, работает.

А я видел подобный код на руборде:
Код:
#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) ;Задаём соотвествие для обеих ядер


Если я не ошибаюсь, то не 0x09, а 0x01, 0x02, 0x03
 
Верх