24.11.2014 Views

Программирование на С++ - eDrive

Программирование на С++ - eDrive

Программирование на С++ - eDrive

SHOW MORE
SHOW LESS

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);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!