Содержание
- 2. Процесс - экземпляр выполняемого приложения. При запуске приложения происходит выделение памяти под процесс, в часть которой
- 3. Каждый поток может создать другой поток и т.д. Каждый процесс имеет свой уникальный идентификатор – целое
- 4. В 32-х разрядных версиях Windows используется вытесняющая многозадачность ОС разделяет процессорное время между разными приложениями и
- 5. Класс – TThread tnew = class(tthread) private { private declarations } protected procedure execute; override; end;
- 6. Запустить поток var new: tnew; … begin new := tnew.create(true); end; Значение true в методе create
- 7. Пример Теперь создадим модуль для потока. Для этого выберем пункт меню File->New->Other для открытия окна создания
- 8. Назовем свой поток tnew Код созданного для потока модуля: unit MyThread; interface uses Classes; type T
- 9. У объекта есть только одна процедура Execute. В любых потоках эта процедура обязана быть переопределена, и
- 10. procedure TCountObj.Execute; begin index:=1; //Запускаем бесконечный счётчик while index>0 do begin Synchronize(UpdateLabel); Inc(index); if index>100000 then
- 11. Переменную index объявим как integer в разделе private объекта потока. Там же объявим процедуру UpdateLabel. Эта
- 12. подключаем главную форму в раздел uses. В методе Execute запускается цикл while, который будет выполняться, пока
- 13. о функции Synchronize. Если процедура вызвана в методе Synchronize, то выполнение основной программы и потока замораживается
- 14. Главная программа В раздел uses главной формы (самый первый, который идёт после interface) добавяемл модуль потока
- 15. В разделе private объявляем переменную co типа Ttnew (объект нашего потока). По нажатию кнопки "Запустить" напишем
- 16. возможности потоков Suspend - приостанавливает поток. Для вызова нужно написать co.Suspend. Чтобы возобновить работу с этой
- 17. Suspended - если этот параметр true, то поток находится в паузе. Terminated - если true, то
- 18. сообщение SendMessage Каждый раз, когда надо обновить содержимое текста мы можем посылать окну сообщение SendMessage с
- 19. сообщение SendMessage SendMessage(Form1.Edit1.Handle, WM_SETTEXT, 0, Integer(PChar(IntToStr(index)))); в разделе uses нужно добавить два модуля: windows (здесь объявлена
- 20. const PROGRESS_POS = WM_USER+1; В объявление класса формы добавим новый метод, а затем и его реализацию:
- 21. TNewThread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1;
- 22. Критические секции var Form1: TForm1; CriticalSection: TCriticalSection; ... procedure TForm1.FormCreate(Sender: TObject); begin CriticalSection:=TCriticalSection.Create; end;
- 24. Скачать презентацию