Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 27

Программное переключение CPU

29.04.2012, 14:39. Показов 1670. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Такой вопрос.
В Windows есть такая возможность как распределение нагрузки на CPU приложениям

Пример ниже: грузите картинки на форум



Такой вопрос:
Возможно ли такое сделать программно? то есть фактически расставить галочки самому.
Просто нужно отправить один на процесс на одно ядро а другой процесс на другое.. подскажите какие нибудь варианты пожалуйста..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2012, 14:39
Ответы с готовыми решениями:

Программное переключение меню
Всем доброго времени суток. У меня есть стороннее приложение при клике по окну которого появляется меню (стандартное, как у большинства...

Снова про OpenCL в Delphi + программное измерение загрузки CPU & GPU (работающий пример)
Уже более года назад приводил здесь на форуме пример работы с OpenCL в связке с Delphi - ...

Программное переключение счетчика
накидал плагин для переключалки. http://jsfiddle.net/wfmttp7n/3/ Но не знаю как сделать так, что-бы по ходу кода я мог в ручную...

6
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
29.04.2012, 15:44
SetProcessAffinityMask
0
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 27
29.04.2012, 16:31  [ТС]
А как насчет помочь кодом?
0
0 / 0 / 0
Регистрация: 02.11.2017
Сообщений: 1
02.11.2017, 09:22
проблема актуальна. нужен хоть какойто пример... для delphi
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
03.11.2017, 14:50
egorzenit, 10 секунд гугления:
https://msdn.microsoft.com/en-... s.85).aspx
http://www.vsokovikov.narod.ru... tymask.htm - на русском языке
[del] - можно почитать, что пишет народ. Может найдётся что-то стоящие.
0
Фриланс Pascal/Delphi etc
 Аватар для ILinker
67 / 73 / 16
Регистрация: 25.11.2016
Сообщений: 263
05.11.2017, 15:57
Вот нашёл такой код:

Как запустить процесс на конкретном процессоре в много процессорной системе?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
Code:
 
function ExecuteProcess(FileName: string; Visibility: Integer; BitMask: Integer; Synch: Boolean): Longword;
 
//valori di Visibility:
 
{
 
Value                Meaning
 
SW_HIDE            :Hides the window and activates another window.
 
SW_MAXIMIZE        :Maximizes the specified window.
 
SW_MINIMIZE        :Minimizes the specified window and activates the next top-level window in the Z order.
 
SW_RESTORE        :Activates and displays the window. If the window is minimized or maximized,
 
                   Windows restores it to its original size and position. An application should
 
                   specify this flag when restoring a minimized window.
 
SW_SHOW                :Activates the window and displays it in its current size and position.
 
SW_SHOWDEFAULT        :Sets the show state based on the SW_ flag specified in the STARTUPINFO
 
                       structure passed to the CreateProcess function by the program that started the application.
 
SW_SHOWMAXIMIZED       :Activates the window and displays it as a maximized window.
 
SW_SHOWMINIMIZED       :Activates the window and displays it as a minimized window.
 
SW_SHOWMINNOACTIVE     :Displays the window as a minimized window. The active window remains active.
 
SW_SHOWNA              :Displays the window in its current state. The active window remains active.
 
SW_SHOWNOACTIVATE      :Displays a window in its most recent size and position. The active window remains active.
 
SW_SHOWNORMAL          :Activates and displays a window. If the window is minimized or maximized,
 
                     Windows restores it to its original size and position. An application should specify this
 
                     flag when displaying the window for the first time.
 
}
 
//FileName: the name of the program I want to launch
 
//Bitmask:   specifies the set of CPUs on wich I want to run the program
 
   //the BitMask is built in the following manner:
 
   //I have a bit sequence: every bit is associated to a CPU (from right to left)
 
   //I set the bit to 1 if I want to use the corrisponding CPU, 0 otherwise
 
   //for example: I have 4 processor and I want to run the specified process on the CPU 2 and 4:
 
   //the corresponding bitmask will be     1010 -->2^0 * 0 + 2^1 * 1 + 2^2 * 0 + 2^3 * 1 = 2 + 8 = 10
 
   //hence BitMask = 10
 
//Synch: Boolean --> True if I want a Synchronous Execution (I cannot close
 
//my application before the launched process is terminated)
 
 
 
var
 
zAppName: array[0..512] of Char;
 
zCurDir: array[0..255] of Char;
 
WorkDir: string;
 
StartupInfo: TStartupInfo;
 
ProcessInfo: TProcessInformation;
 
Closed: Boolean;
 
begin
 
Closed := True;
 
StrPCopy(zAppName, FileName);
 
GetDir(0, WorkDir);
 
StrPCopy(zCurDir, WorkDir);
 
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
 
StartupInfo.cb := SizeOf(StartupInfo);
 
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
 
StartupInfo.wShowWindow := Visibility;
 
if not CreateProcess(nil,
 
   zAppName, // pointer to command line string
 
   nil, // pointer to process security attributes
 
   nil, // pointer to thread security attributes
 
   False, // handle inheritance flag
 
   CREATE_NEW_CONSOLE or // creation flags
 
   NORMAL_PRIORITY_CLASS,
 
   nil, //pointer to new environment block
 
   nil, // pointer to current directory name
 
   StartupInfo, // pointer to STARTUPINFO
 
   ProcessInfo) // pointer to PROCESS_INF
 
   then Result := WAIT_FAILED
 
else
 
begin
 
   //running the process on the set of CPUs specified by BitMask
 
   SetProcessAffinityMask(ProcessInfo.hProcess, BitMask);
 
   /////
 
   if (Synch = True) then //if I want a Synchronous execution (I cannot close my
 
   // application before this process is terminated)
 
     begin
 
       Closed:= False;
 
       repeat
 
         case WaitForSingleObject(
 
           ProcessInfo.hProcess, 100) of
 
             WAIT_OBJECT_0 : Closed:= True;
 
             WAIT_FAILED : RaiseLastWin32Error;
 
         end;
 
         Application.ProcessMessages;
 
       until (Closed);
 
       GetExitCodeProcess(ProcessInfo.hProcess, Result);
 
       //exit code of the launched process (0 if the process returned no error  )
 
       CloseHandle(ProcessInfo.hProcess);
 
       CloseHandle(ProcessInfo.hThread);
 
     end
 
   else
 
     begin
 
       Result := 0;
 
     end;
 
end;
 
end; {ExecuteProcess}
 
 
 
// Open Taskmanager, select the launched process, right click,
 
// "Set affinity", you will see a check on the CPUs you selected
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6812 / 2052 / 238
Регистрация: 14.12.2014
Сообщений: 4,304
Записей в блоге: 12
12.11.2017, 13:38
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
// Переключить текущий процесс на процессор с номером ID (отсчёт с 0) и получить новую маску процессоров текущего процесса
function SetProcID(ID: Cardinal): Cardinal;
var SA: Cardinal;
begin
  SetProcessAffinityMask(GetCurrentProcess, 1 shl ID);
  Result := 0;
  GetProcessAffinityMask(GetCurrentProcess, Result, SA);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('New affinity mask = '+IntToStr(SetProcID(0))); // Оставляем только 0-й логический процессор
end;
Добавлено через 24 минуты
Ещё вариант:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Получить номер процессора, на котором работает текущий поток (только на Vista+ !!!)
function GetCurrentProcessorNumber: Cardinal; stdcall; external kernel32;
 
// Переключить текущий процесс на процессор номер ID и получить новый номер текущего процессора (отсчёт с 0)
function SetProcID(ID: Cardinal): Cardinal;
begin
  SetProcessAffinityMask(GetCurrentProcess, 1 shl ID);
  Result := GetCurrentProcessorNumber;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Current processor ID = '+IntToStr(GetCurrentProcessorNumber));
  ShowMessage('New processor ID = '+IntToStr(SetProcID(1))); // Устанавливаем только 0-й логический процессор
end;
Единственный момент: мы переключаем весь процесс на новый процессор, а получаем номер процессора только текущего потока. Но в целом, т.к. поток находится внутри процесса, то это нормально
И это будет работать только в Vista+ (иначе функцию GetCurrentProcessorNumber нужно убрать).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.11.2017, 13:38
Помогаю со студенческими работами здесь

Программное переключение раскладки клавиатуры
Кто-нибудь знает, возможно ли в Паскале программное переключение раскладки клавиатуры с русского на английский. Подскажите, пожалуйста!

Программное переключение между MDIChild???
Если кто знает подскажите. Дело вот в чем. У меня на MDI форме должны быть две кнопки для быстрого переключения между открытыми дочерними...

TabControl. Программное переключение вкладок
День добрый! Никак не могу рещить простую проблему: Нужно программным способом переходить по табам с одного на другой, примерно...

Сетевые карты - программное переключение
Привет всем! Помогите плиз! Как подступиться даже не знаю.. Дело в том что на компьютере две сетевые карты (и к ним подключены две...

Возможно ли программное переключение раскладки клавиатуры?
Можно ли определить какова текущая раскладка клавиатуры выбрана и переключить ее на другую? Заранее благодарен всем. кто откликнется.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru