Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2009, 21:24   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Не компилятся потоки в Билдере

Начал изучать потоки в С++ Билдере 6. Вот по книге в качестве примера с потоками набрал код, но программа не компилится, не знаю что делать.
При компиляции программа, останавливается на первой строке:
TThreadForm *ThreadForm;
Declaration syntax error

Вроде правильно,как в книге, но код не работает.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "ThreadFormUnit1.h"

#include "Unit1.h"
#include <windows.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

 TThreadForm *ThreadForm;
    HANDLE Thread;

    DWORD WINAPI ThreadFunc(LPVOID Param)
    {
       HANDLE MainWnd(Param);

       RECT R;
       GetClientRect(MainWnd, &R);

       const MaxWidth = R.right - R.left;
       const MaxHeight = R.bottom - R.top;
       int X1,Y1,X2,Y2,R1,G1,B1;
       bool IsEllipse;
       while(true)
       {
          HDC DC = GetDC(MainWnd);

          X1 = rand() % MaxWidth;
          Y1 = rand() % MaxHeight;
          X2 = rand() % MaxWidth;
          Y2 = rand() % MaxHeight;

          R1 = rand() & 255;
          G1 = rand() & 255;
          B1 = rand() & 255;
          IsEllipse = rand() & 1;

          HBRUSH Brush = CreateSolidBrush(RGB(R1,G1,B1));
          SelectObject(DC, Brush);

          if(IsEllipse)
          Ellipse(DC,X1,Y1,X2,Y2);
          else
          Rectangle(DC,X1,Y1,X2,Y2);

          ReleaseDC(MainWnd,DC);
          Deletebject(Brush);
       }
    }
__fastcall
TThreadForm::TThreadForm(TComponent *Owner) : TForm(Owner)
 {
     randomize();
     DWORD Id;
     Thread = CreateThread(0,0,ThreadFunc,
     ThreadForm->Handle, CREATE_SUSPENDED, &Id);

     if(!Thread)
     {
        ShowMessage("Невозможно создать Thread");
        Application->Terminate();
     }
 }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ResumeThread(Thread);
Button1->Enabled = false;
Button1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Suspended->Thread(Thread);
  Button2->Enabled = false;
  Button2->Enabled = true;
}
//---------------------------------------------------------------------------

Последний раз редактировалось Golovastik; 03.10.2009 в 21:30.
Golovastik вне форума Ответить с цитированием
Старый 03.10.2009, 22:14   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

о мой бог, ты за потоки взялся. надо улетать с этой планеты...
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.10.2009, 22:23   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Взялся за потоки,потому-что дали задание многопоточность на учёбе.
Подскажите пожалуйста,что нужно исправить в данном коде?
Golovastik вне форума Ответить с цитированием
Старый 03.10.2009, 23:46   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
о мой бог, ты за потоки взялся. надо улетать с этой планеты...
да пожалуй ты прав...

Код:
TThreadForm *ThreadForm;
Declaration syntax error
я конечно билдера не знаю, но судя по ошибке ты забыл про объявление класса TThreadForm


ps. Не верь тому, что пишут в книгах... ибо в книгах приводят обрезки кода из готовых программ
counter вне форума Ответить с цитированием
Старый 05.10.2009, 13:19   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Наконец-то исправил. Вот так, заработало.
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <windows.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


TForm1 *Form1;
    HANDLE Thread;

    DWORD WINAPI ThreadFunc(LPVOID Param)
    {
       HANDLE MainWnd(Param);

       RECT R;
       GetClientRect(MainWnd, &R);

       const MaxWidth = R.right - R.left;
       const MaxHeight = R.bottom - R.top;
       int X1,Y1,X2,Y2,R1,G1,B1;
       bool IsEllipse;
       while(true)
       {
          HDC DC = GetDC(MainWnd);

          X1 = rand() % MaxWidth;
          Y1 = rand() % MaxHeight;
          X2 = rand() % MaxWidth;
          Y2 = rand() % MaxHeight;

          R1 = rand() & 255;
          G1 = rand() & 255;
          B1 = rand() & 255;
          IsEllipse = rand() & 1;

          HBRUSH Brush = CreateSolidBrush(RGB(R1,G1,B1));
          SelectObject(DC, Brush);

          if(IsEllipse)
          Ellipse(DC,X1,Y1,X2,Y2);
          else
          Rectangle(DC,X1,Y1,X2,Y2);

          ReleaseDC(MainWnd,DC);
          DeleteObject(Brush);
       }
    }
__fastcall
TForm1::TForm1(TComponent *Owner) : TForm(Owner)
 {
     randomize();
     DWORD Id;
     Thread = CreateThread(0,0,ThreadFunc,
     Form1->Handle, CREATE_SUSPENDED, &Id);

     if(!Thread)
     {
        ShowMessage("Невозможно создать Thread");
        Application->Terminate();
     }
 }

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ResumeThread(Thread);
Button1->Enabled = false;
Button2->Enabled = true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
SuspendThread(Thread);
  Button2->Enabled = false;
  Button1->Enabled = true;        
}
//---------------------------------------------------------------------------
Golovastik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика в С++ Билдере Impuls1989 Общие вопросы C/C++ 19 14.08.2009 15:12
печать в Билдере Dimarik Общие вопросы C/C++ 5 18.07.2009 19:42
Обращение к строке в БИЛДЕРЕ Crasty Помощь студентам 1 15.05.2009 19:00
Из listBox в paintbox в Билдере slonik123 Общие вопросы C/C++ 0 09.03.2009 15:12
задача на с++ в билдере Барби Фриланс 2 16.12.2008 10:06