Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Освоение среды операционной системы Microsoft W...doc
Скачиваний:
57
Добавлен:
09.11.2019
Размер:
6.83 Mб
Скачать

5.2.3. Создание многопоточных приложений

Представление потока в C++ Builder. В C++ Builder потоки представляются объектами. Чтобы создать поток, необхо­димо породить новый класс от класса TThread (он объявлен в заголовочном файле Classes.hpp), перекрыть в нем виртуальный метод Execute и поместить в этот метод программный код потока.

Запуск потока осуществляется путем создания объекта такого класса. В мо­мент создания объекта автоматически вызывается метод Execute, который начинает выполняться одновременно с участком кода, создавшим поток. По­сле работы метода Execute поток автоматически завершается и объект потока уничтожается.

Следующие шаги показывают, как организовать в приложении новый поток.

  1. Начните новое приложение и сохраните его под именем Threads. Модуль формы сохраните под именем Main.

  2. Д ля того чтобы создать в проекте новый класс потока, выберите в меню «File» пункт «New». Появится окно диалога «New Items». На вкладке «New» выберите элемент «Thread Object» и щелкните по кнопке ОК (рис.44).

Рис.44

На экране появится диалог «New Thread Object», в котором следует ввести имя класса. Придерживаясь принятых соглашений, введите имя, начинающееся с большой буквы Т, например TMyThread, и завершите диалог щелчком на кнопке ОК (рис.45).

Р ис.45

Среда C++ Builder создаст следующий скелет модуля с объявлением класса потока.

Файл Unit.h:

// -------------------------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

// -------------------------------------------------------------------------------------------

#include <vcl\Classes.hpp>

// -------------------------------------------------------------------------------------------

class THyThread : public TThread

{

private:

protected:

void __fastcall Execute();

public:

__fastcall TmyThread (bool CreateSuspended) ;

};

// -------------------------------------------------------------------------------------------

#endif

Файл Unit1.cpp:

#include <vcl\vcl.h>

#pragma hdrstop

#include "unit1.h"

// -------------------------------------------------------------------------------------------

// Important: Methods and properties of objects in VCL can only be

// used in a method called using Synchronize, for example:

//

// Synchronize(UpdataCaption);

//

// where UpdateCaption could look like:

//

// void __fastcall TMyThread::UpdateCaption()

// {

// Form1->Caption = "Updated in a thread";

// }

// -------------------------------------------------------------------------------------------

__fastcall TMyThread::TMyThread(boot CreateSuspended) : TThread(CreateSuspended)

{

}

// -------------------------------------------------------------------------------------------

void __fastcall TMyThread::Execute()

{

// ---- Place thread code here ----

}

  1. Сохраните этот модуль под именем MyThrd. В модуле объявлен класс TMyThread, порожденный от класса TThread. Класс TThread является базовым для всех потоков и имеет ряд свойств и методов, используемых для их управления. Самый важный из них – метод Execute. Он всегда перекрывается в наследниках и содержит код потока, выполняемый одновременно с кодом главной программы. Вызов метода Execute происходит автоматически при конструировании объекта потока.