Создание процесса с помощью функции WinExec. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание процесса с помощью функции WinExec.



VAR ErrCode:Integer;

PName:Array [0..79] of char;

begin

If OpenDialog1.Execute then

begin

ErrCode:=WinExec(StrPCopy(PName,OpenDialog1.FileName),SW_RESTORE);

PName:=PName;

Case ErrCode of

0: ShowMessage('Не хватает памяти или ресурсов');

ERROR_BAD_FORMAT:

ShowMessage('Ошибочный файл '+PName);

ERROR_FILE_NOT_FOUND:

ShowMessage('Не найден файл '+PName);

ERROR_PATH_NOT_FOUND:

ShowMessage('Не найден каталог '+ExtractFilePath(OpenDialog1.FileName));

end;

end;

end;

Создание процесса с помощью функции ShellExecute.

VAR

POperation:Array[0..50] of Char;

PFilename:Array[0..254] of Char;

begin

POperation:='open'+#0;

PFilename:='C:\WINNT\system32\calc.exe'+#0;

ShellExecute(Handle,POperation,PFilename,nil,nil,SW_RESTORE);

end;

Создание многопоточного приложения.

В данном примере создается многопоточное приложение, выполняющее следующие действия:

Первичный поток открывает файл для записи и запускает еще два потока. Второй поток за предоставляемый квант времени увеличивает счетчик на 1. Третий поток за предоставляемый квант времени записывает очередное значение счетчика в файл. Первичный поток работает, пока значение счетчика не станет больше 30, после чего первичный поток завершает работу второго и третьего потоков.

1. Описание глобальных переменных, используемых всеми потоками. (Например, в блоке VAR в начале программы).

var

Form1: TForm1;

sum:Integer;

f:TextFile;

implementation …..

2. В начале программы следует описать второй и третий потоки.

implementation

 

{$R *.dfm}

procedure Thread1;

begin

While Sum<20 do

begin

Inc(Sum);

Sleep(30);

end;

end;

 

procedure Thread2;

begin

While Sum <20 do

begin

Writeln(f,IntToStr(Sum));

Sleep(30);

end;

end;

3. Первичный поток имеет вид:

VAR hThread1,hThread2:THandle;

pFunc1,pFunc2:pointer;

ThreadID1,ThreadID2:CARDINAL;

begin

Sum:=0;

AssignFile(f,'C:\temp.txt');

Rewrite(f);

pFunc1:=@Thread1;

pFunc2:=@Thread2;

hThread1:=CreateThread(nil,0,pFunc1,nil,0,ThreadID1);

hThread2:=CreateThread(nil,0,pFunc2,nil,0,ThreadID2);

While Sum<20 do Sleep(30);

ShowMessage ('Работа завершена');

CloseFile(f);

TerminateThread(hThread1,0);

TerminateThread(hThread2,0);

end;

5.4. Задания для самостоятельной работы

1. Программа, выполняющая запуск любого процесса и изменяющая приоритет данного процесса.

2. Программа, выполняющая запуск любого процесса и завершение данного процесса по команде пользователя..

3. Создание двух программ. Первая программа выводит на экран случайные числа. Вторая программа запускает первую как процесс и завершает работу первой программы при нажатии управляющей клавиши.

4. Программа выводит на экран содержимое каталога. При выборе любого файла последний запускается на выполнение при помощи функции CreateProcess (при условии, что выбран исполняемый файл).

5. Программа выводит на экран содержимое каталога. При выборе любого текстового файла при помощи функции CreateProcess запускается блокнот или редактор Write и открывается выбранный файл.

6. Создание многопоточной программы. Вторичный поток создается при нажатии управляющей клавиши и выводит на экран последовательность четных чисел. Работа вторичного потока завершается при нажатии управляющей клавиши.

7. Создание программы, имеющей три потока. Каждый поток рисует в окне приложения соответственно эллипс, прямоугольник и текстовую строку.

8. Создание программы, имеющей несколько потоков. Вторичные потоки создаются и завершаются по команде пользователя. Первичный поток выводит на экран время создания, завершения и работы каждого вторичного потока.

9. Создание программы, имеющей два потока. Вторичный поток выполняет любые циклические вычисления и завершается по команде пользователя. Первичный поток выводит на экран промежуточные результаты вычислений, выполняемых вторичным потоком.

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Сравните возможности функций CreateProcess? WinExec и ShellExecute

2. В чем заключается различие между процедурой ExitProcess и функцией TerminateProcess?

3. Почему ExitProcess и ExitThread реализованы как процедуры, TerminateProcess и TerminateThread – как функции?

4. Как установит приоритет текущего процесса равным 31?

5. Как установит приоритет текущего процесса равным 1?

 


ЛАБОРАТОРНАЯ РАБОТА № 6

РАБОТА С ФУНКЦИЯМИ TOOLHELP

Цель работы

Целью работы является получение навыков работы с функциями библиотеки ToolHelp API для получения системной информации. В данной работе рассматриваются следующие вопросы:

· Получение списка всех процессов в системе;

· Получение списка всех модулей в системе;

· Получение списка всех потоков выбранного процесса;

· Получение карты памяти выбранного процесса.

Теоретическое введение

При разработке программного обеспечения часто возникает задача получения системной информации, например, списка всех загруженных процессов или списка созданных потоков. В Windows первоначально отсутствовали средства для получения данной информации. Однако, начиная с Windows 95, в состав операционной системы включен набор функций, позволяющих получать системную информацию. Данные функции включены в ToolHelp API. В Delphi функции ToolHelp API описаны в файле TlHelp32.pas.

Функции ToolHelp можно условно разбить на следующие функциональные группы:

· Получение «мгновенного снимка» системы;

· Информация о процессах;

· Информация о потоках;

· Информация о кучах (heap);

· Информация о виртуальной памяти;

· Информация о модулях.



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 262; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.12.1 (0.007 с.)