03.02.2015, 16:24
|
Новичок
|
|
Регистрация: 14.10.2012
Сообщения: 58
Версия Delphi: Delphi 10.4
Репутация: 10
|
|
Где то вычитывал, что правильнее использовать ShellExecute.
Код:
function ShellExecute(hWnd: HWnd; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall;
в uses подключить ShellAPI и используем.
Пример:
Код:
ShellExecute(0,'open','cmd.exe',Pchar('/c start /'+номер_ядра+' '+'/'+приоритет_если нужен'+DirGames),pchar(ExtractFileDir('полный путь до программы')),SW_HIDE);
подробнее можно посмотреть в google или на msn=)
А есть еще такая фигня если запускать надо программу по определенным ядром.
Код:
procedure Tform1.RunProcess(FilePatch: string; {Priority: TProcessPriority;} corenumber:integer);
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
Done: Boolean;
cpuset : set of 0..31;
begin
FillChar(StartInfo, SizeOf(TStartupInfo), #0);
FillChar(ProcInfo, SizeOf(TProcessInformation), #0);
StartInfo.cb := SizeOf(TStartupInfo);
CmdLine := Format('"%s" %s', [FilePatch,''{параметры запуска}]);
UniqueString(CmdLine);
try
Done := CreateProcess(PChar(FilePatch), PChar(CmdLine), nil, nil, False,
CREATE_NEW_PROCESS_GROUP + Integer(Priority),
nil, PChar(ExtractFileDir(FilePatch)) , StartInfo, ProcInfo);
if Done then
begin
// 0 = <All Processors>
// 1 = CPU 0
// 2 = CPU 1
// 3 = CPU 2
// 4 = CPU 3
// 5 = CPU 5
// 6 = CPU 6
// 7 = CPU 6
// 8 = CPU 7
cpuset:=[corenumber];
//include (cpuset,5); // add cpu 6
SetProcessAffinityMask(ProcInfo.hProcess, dword(cpuset));
try
while not Application.Terminated and
(WaitForSingleObject(ProcInfo.hProcess, 100)=WAIT_TIMEOUT) do
Application.ProcessMessages;
finally
if ProcInfo.hProcess <> 0 then
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end else
MessageDlg('Программа не запустится ' + FilePatch, mtError, [mbOk], 0)
finally
end;
end;
|