Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 1-ая программа с потоками 
:(
    Опции темы
Golovastik
  Дата 2.10.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Начал изучать потоки в С++ Билдере 6. Вот по книге в качестве примера с потоками набрал код, но программа не компилится, не знаю что делать.


M
dumb
Golovastik, текст сообщений об ошибках прилагай. так же неплохо их самому пытаться прочитать и осмыслить.


Код



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

#include <vcl.h>
#include <windows.h>
#include "ThreadFormUnit.h"
#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
    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;
          IsEllipce = 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);
          DeleteIbject(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;
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
SVN74
Дата 2.10.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Golovastik @  2.10.2009,  20:18 Найти цитируемый пост)
HANDLE MAinWnd(Param);

Тут явно ошибка...
PM MAIL WWW   Вверх
Golovastik
Дата 3.10.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При компиляции программа, останавливается на первой строке
Код

 TThreadForm *ThreadForm;

Declaration syntax error

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

PM MAIL   Вверх
dumb
Дата 4.10.2009, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



содержимое файла ThreadFormUnit.h показывай
PM MAIL   Вверх
Anikmar
Дата 4.10.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Golovastik @  3.10.2009,  19:58 Найти цитируемый пост)
TThreadForm *ThreadForm;

В примере форма так названа, у вас 

Цитата(Golovastik @  2.10.2009,  20:18 Найти цитируемый пост)
TForm1 *Form1;


Не надо копипастить все без разбора.
PM MAIL ICQ   Вверх
Golovastik
Дата 4.10.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, в примере только,то что я скинул, такого:
Код

TForm1 *Form1;

там нету.
И содержимое ThreadFormUnit.h, проверял несколько раз, там нету, просто в программе, подключен файл  ThreadFormUnit.h.
Ошибка на том же месте.
Declaration syntax error

Вот ссылка,от куда пробывал писать по многопоточности:
Код

http://books.google.ru/books?id=bk2oFiI4PzQC&pg=PT100&lpg=PT100&dq=Многопоточность+на+С%2B%2B+Билдер&source=bl&ots=nI3hr90bTY&sig=vMshBOsfpzC134mHJsDsDmS0zW0&hl=ru&ei=_QfGSvyDCI2CnQOwhfFE&sa=X&oi=book_result&ct=result&resnum=7#v=onepage&q=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C&f=false

179 - 180 страница.

Это сообщение отредактировал(а) Golovastik - 4.10.2009, 21:04
PM MAIL   Вверх
Golovastik
Дата 4.10.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Наконец-то заработало, нужно было вот так:
Код

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

#include <vcl.h>
#pragma hdrstop
#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);
          DeleteObject(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 TThreadForm::Button1Click(TObject *Sender)
{
ResumeThread(Thread);
Button1->Enabled = false;
Button2->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TThreadForm::Button2Click(TObject *Sender)
{
 SuspendThread(Thread);
  Button2->Enabled = false;
  Button1->Enabled = true;
}
//---------------------------------------------------------------------------

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

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

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

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

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


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

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


 




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


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

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