Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточное приложение 
:(
    Опции темы
123lexx321
Дата 20.3.2011, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Совсем запарился, помогите.
Задание:
Разработать программу, которая создает в отдельном потоке случайный массив А из N целых чисел в диапазоне от -999 до 999 выводит на экран эти числа. Создание и вывод элементов массива производится через заданное время T, N и T вводятся пользователем до запуска процесса. Массив обрабатывается двумя другими потоками В и С, работающими параллельно с потоком, создающим массив. Все потоки выводят результаты своей работы в текстовые окна, каждый поток в свое окно.
Задание В. Вычисление общего количества цифр всех элементов массива
Задание C. Определение и вывод чисел, являющихся простыми числами.

Создал форму, создал 3 потока. Во втором и третьем потоке написал код для задания В и С(кстати проверьте что не так). В первом потоке написал код массива. 

Код


#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *Button1;
        TButton *Button2;
        TMemo *Memo1;
        TMemo *Memo2;
        TMemo *Memo3;
        TTimer *Timer1;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TEdit *Edit1;
        TEdit *Edit2;
        TLabel *Label4;
        TLabel *Label5;
        void __fastcall Button1Click(TObject *Sender);
private:        // User declarations
        
public:         // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Код

#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}


Юнит первого потока
Код


#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class MyThr1 : public TThread
{            
private:
protected:
        void __fastcall Execute();
public:
        int i;
        char A[]="";
        __fastcall MyThr1(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

Код

#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#pragma package(smart_init)
 
//---------------------------------------------------------------------------
 
__fastcall MyThr1::MyThr1(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MyThr1::Execute()
{
    Form1->Memo1->Text=StrToInt(Form1->Edit2->Text)+"случайных значений";
        for(i=0;i<Form1->Edit2->Text;i++)
            {
              A[i]= random(1999)-1000;
              Form1->Memo1->Lines->Add(IntToStr(A[i]));
            }
}


Юнит второго потока
Код


#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Unit2.cpp>
 
//---------------------------------------------------------------------------
class MyThr2 : public TThread
{            
private:
protected:
        void __fastcall Execute();
public:
        __fastcall MyThr2(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

Код


#include <vcl.h>
#pragma hdrstop
 
#include "Unit3.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
 
//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall MyThr2::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
 
__fastcall MyThr2::MyThr2(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MyThr2::Execute()
{
        //---- Place thread code here ----
             while (A[i]>0)
               {
               A[i]/=10;
               count++;
               }
        Form1->Memo3->Text="Вычисление общего количества цифр всех элементов массива"+count;
}

Юнит 3 потока
Код


#ifndef Unit4H
#define Unit4H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Unit2.cpp>
 
//---------------------------------------------------------------------------
class MyThr3 : public TThread
{            
private:
protected:
        void __fastcall Execute();
public:
        __fastcall MyThr3(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

Код


#include <vcl.h>
#pragma hdrstop
 
#include "Unit4.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
 
__fastcall MyThr3::MyThr3(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MyThr3::Execute()
{
        //---- Place thread code here ----
        Form1->Memo3->Text="Опеределение и вывод чисел, являющихся простыми";
        bool flag=1;
        for (int j=2;i<A[i];j++)
            {
            if (A[i]%j==0){flag=0;break;}
            }
        if (flag) Form1->Memo3->Lines->Add(IntToStr(A[i]));
 
}

А дальше начались проблемы.
1.Не знаю точно в правильном ли месте написал код массива, чтоб к нему могли обращаться все потоки?
2.Создал две кнопки START и STOP для запуска и остановки потоков. Подскажите где и как написать код для этих кнопок? И как использовать параметр T?
Заранее спасибо.
PM MAIL   Вверх
123lexx321
Дата 21.3.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Что совсем некому помочь?
Ну да ладно. Как создать потоки я разобрался. Теперь такой вопрос как элементы массива создаваемые  в первом потоке можно использовать во втором и третьем?
PM MAIL   Вверх
Dem_max
Дата 22.3.2011, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Цитата

Теперь такой вопрос как элементы массива создаваемые  в первом потоке можно использовать во втором и третьем?

ну это тебе решать как ты этот массив будешь использовать, по мне так не использовать вообще и радоваться жизни


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
ZVano
Дата 22.3.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: 1
Всего: 4



Разработка многопоточных приложений в C++Builder
http://www.rxlib.ru/WinLesson/bles2_1.htm


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
123lexx321
Дата 22.3.2011, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Спасибо всем за помощь.... Особенно Dem_max. Но всё таки я её сделал
PM MAIL   Вверх
Alca
Дата 22.3.2011, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50





--------------------
PM WWW ICQ Skype Jabber   Вверх
_Dimon_
Дата 24.3.2011, 02:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(123lexx321 @ 22.3.2011,  11:47)
Спасибо всем за помощь.... Особенно Dem_max. Но всё таки я её сделал

Так дал бы всем нам готовое решение, посмотрели бы ....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.