- Построить приложение для запуска приложения, путь и имя которого можно задавать в диалоговом окне. Для запуска приложения используйте функцию WinExec().
- То же самое сделать при помощи функции CreateProcess.
- Построить приложение, рассмотренное в примере 1, проверить его работу.
- Добавить в разработанное приложение средства получения количественных характеристик количества вычислений. Использовать: обычное усреднение за N секунд;
Код из примера 1 выполнен на 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 |
1. Создайте новое приложение - на форму положите два компонента Edit, два компонента TrackBar (страница Win32) и один компонент Timer. 2. Сохраните модуль как ThrdUnit, а проект как ThrdProj. 3. Откройте меню File и выберите пункт New. Выполните двойной щелчок на объекте типа поток (Thread Object). 4. В открывшемся диалоговом окне для именования объекта введите TsimpleThread и нажмите Enter. Delphi создаст шаблон для нового потока. 5. В приведенный ниже фрагмент шаблона type TsimpleThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; добавьте описание переменной для подсчета количества выполненных вычислений (перед end): Count : Integer; 6. Определите метод Execute следующим образом (вычисление суммы 10 случайных чисел) procedure TsimpleThread.Execute; { Place thread code here } var I, total : Integer; begin while true do begin Total:=0; for I:=1 to 10 do Inc(Total,Random(MaxInt div 10)); Inc (Count); end; end; 7. Сохраните модуль с потоком как Thrd.pas 8. Отредактируйте главный файл модуля ThrdUnit.pas - добавьте модуль Thrd к списку используемых модулей ( uses …, Thrd) 9. В секции public формы Tform1 добавьте строку Thread1, Thread2 : TsimpleThread; 10. Создайте обработчики событий приложения по приведенному ниже тексту. procedure TForm1.Timer1Timer(Sender: TObject); begin Edit1.Text := IntToStr( Thread1.Count ); Edit2.Text := IntToStr( Thread2.Count ); Thread1.Count := 0; Thread2.Count := 0; end; procedure TForm1.FormCreate(Sender: TObject); begin Thread1 := TSimpleThread.Create( False ); Thread1.Priority := tpLowest; Thread2 := TSimpleThread.Create( False ); Thread2.Priority := tpLowest; end; procedure TForm1.TrackBar1Change(Sender: TObject); var I : Integer; Priority : TThreadPriority; begin Priority := tpLowest; For I := 0 To ( Sender as tTrackBar ).Position - 1 Do inc( Priority ); If Sender = TrackBar1 Then Thread1.Priority := Priority Else Thread2.Priority := Priority; end; 11. Чтобы связать метод, созданный на шаге 10, со вторым регулятором, выберите TrackBar2 в окне ObjectInspector и определите для события OnChange метод TrackBar1Change. 12. Свойству Max обоих компонентов TrackBar установите значение 4 (или 3). Это необходимо сделать для того, чтобы устанавливаемое значение приоритета потока не было слишком большим. В противном случае приложение выйдет из-под контроля. 13. Запустите созданное приложение, предварительно сохранив его на диске. |
Проекты выполнены на C# c сохранением всех условий в задаче, используется WinApi стоимость решения 200 руб. Приобрести его можно у меня связавшись со мной в вконтакте или email
Номер проекта 210