Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ООП] / Лекции / Zao_2009_Paral_1.doc
Скачиваний:
38
Добавлен:
07.02.2016
Размер:
58.88 Кб
Скачать

Задание 3.1. Использование tThread для разработки потоков команд

Цель: изучить класс TThread и научиться создавать многопоточные приложения, с помощью которых можно исследовать некоторые параллельные алгоритмы.

Для первоначального изучения процесса разработки многопоточных приложений важно внимательно и четко выполнить следующую последовательность действий:

  1. В пользовательском (личном) каталоге создайте отдельную папку для проекта;

  2. Запустите Borland C++ Builder и создайте шаблон консольного приложения(смотри задание 2);

  3. Выполните команду FiIe|New в главном меню;

  4. В появившейся вкладке New Itemsвыберите объектThread Object;

  5. В диалоговом окне, предлагающем ввести имя класса производного от TThread, наберите название нового класса, напримерTThread1и нажмитеOK. В результате будет создан новый модуль с именемUnit1.cpp, содержащий реализацию функций-членовExecute()и конструктора нового (дочернего) потока;

  6. Создайте дополнительный модуль. Для этого выберите в меню пункт File|New Unit, будет создан пустой модульUnit2.cpp;

  7. Сохраните проект в созданном каталоге. При этом переименуйте Unit1.cppвThrdtyp.cpp, аUnit2.cpp‑ вcommon.cpp;

  8. В файле common.cppпоместите функцию, которая выводит на экран 20 раз строкуpи число:

void WriteOut(char *p)

{

for(int i=0;i<20;i++)

printf("%s %i\n",p,i);

}

  1. В заголовочном файле common.h(создается автоматически) поместите прототип этой функции:

void WriteOut(char *p);

С помощью директивы #includeвключите этот файл во все файлы с расширением.cpp;

  1. Модифицируйте конструктор (в файле Thrdtyp.cpp):

__fastcall TThread1::TThread1(char *s, bool CreateSuspended): TThread(CreateSuspended)

{

name=s;

}

  1. Приведите в соответствие текст файла Thrdtyp.h, он должен иметь вид:

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

#ifndef ThrdtypH

#define ThrdtypH

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

#include <vcl\Classes.hpp>

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

class TThread1:public TThread

{

private:

protected:

char *name;

void __fastcall Execute();

public:

__fastcall TThread1(char *s, bool CreateSuspended);

};

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

#endif

  1. Переопределите функцию void __fastcall TThread1::Execute()таким образом, чтобы она вызывала функциюWriteOut()и идентифицировала поток команд:

void __fastcall TThread1::Execute()

{

WriteOut(name);

}

  1. В основной программе создайте экземпляр класса TThread1и запустите поток одновременно с выполнением основной программой вызова функцииWriteOut():

#include <vcl\condefs.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include "Thrdtyp.h"

#include "common.h"

#pragma hdrstop

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

USERES("thrdex.res");

USEUNIT("Thrdtyp.cpp");

USEUNIT("common.cpp");

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

int main(int argc, char **argv)

{

TThread1 *Thread1;

Thread1=new TThread1("Thread",false); //cоздаем экземпляр класса

//и запускаем его

WriteOut("Main"); //выполняем основной поток команд

Thread1->WaitFor(); //ожидаем окончания работы дочернего потока

Thread1->Free(); //вызов деструктора

puts("Press any key");

getch();

return 0;

}

  1. Сохраните все файлы проекта и запустите его.

Соседние файлы в папке Лекции