Программирование на С++ - eDrive
Программирование на С++ - eDrive
Программирование на С++ - eDrive
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
33<br />
ка. Методы Lock и Unlock управляют блокировкой доступа других потоков<br />
к канве при рисовании.<br />
3. Запуск и завершение бесконечного цикла. Класс формы дополнить указателем<br />
<strong>на</strong> поток, <strong>на</strong>пример:<br />
myThread *mt;<br />
В опустевшем обработчике кнопки запуска создать поток, не запуская его<br />
(аргумент конструктора CreateSuspended = true), разрешить потоку освобождать<br />
память при завершении работы свойством FreeOnTerminate, после<br />
чего запустить поток <strong>на</strong> выполнение методом Resume:<br />
void __fastcall TForm1::Button1Click (TObject *Sender)<br />
{ mt = new myThread (true);<br />
mt–>FreeOnTerminate = true;<br />
mt–>Resume (); }<br />
Поместить в форму вторую кнопку, пред<strong>на</strong>з<strong>на</strong>ченную для завершения рисования<br />
остановкой выполнения потока методом Terminate:<br />
void __fastcall TForm1::Button2Click (TObject *Sender)<br />
{ mt–>Terminate (); }<br />
Метод Terminate уста<strong>на</strong>вливает в истинное з<strong>на</strong>чение переменную Terminated,<br />
тем самым прекращая цикл выполнения потока. Испытать приложение,<br />
убедившись в возможности управления запуском и остановкой процесса<br />
рисования.<br />
4. Вывод текста в потоке. Поместить в форму <strong>на</strong>дпись для счетчика числа<br />
<strong>на</strong>рисованных фигур. Дополнить класс потока переменной-счетчиком и<br />
функцией, выполняющей вывод в <strong>на</strong>дпись з<strong>на</strong>чения этого счетчика, а в<br />
файле кода модуля потока определить эту функцию, <strong>на</strong>пример:<br />
long myCount;<br />
void __fastcall myOutput ();<br />
void __fastcall myThread::myOutput ()<br />
{ Form1–>Label1–>Caption = myCount++; }<br />
В исполнительную функцию потока включить вызов функции синхронизации<br />
вывода данных в потоке, применение которой исключает конфликты<br />
взаимодействия потоков:<br />
Synchronize (myOutput);