Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Определение потока


Автор: Valeri 13.3.2007, 09:24
Использую при работе ВСВ 6. Создаю класс-наследник потока TComThread (точнее он создается автоматически в отдельном модуле):

class TComThread : public TThread
{            
private:

protected:
        void __fastcall Execute();
public:
        __fastcall TComThread(bool CreateSuspended);

         //
};

 В заголовочном файле главной формы (в классе) пытаюсь создать экземпляр потока  класса TComThread (делаю это в классе формы, чтобы можно было обращаться к этому потоку из других модулей программы):

private :

TComThread* ComThread;

Компилятор выдает ошибки :
Type name expected 
Declaration missing ;

Насколько я понял компилятор, на момент компиляции файла основной формы, не видит модуль, в котором создан класс-наследник TComThread. Почему так может быть? 

Автор: Fazil6 13.3.2007, 09:56
Цитата(Valeri @  13.3.2007,  08:24 Найти цитируемый пост)
 Почему так может быть? 

#include не сделан

Автор: ama_kid 13.3.2007, 09:56
#include "модуль_потока.h" ?

Автор: Valeri 13.3.2007, 10:00
Извиняюсь, забыл сказать, что все include сделаны.

Автор: pandrew 13.3.2007, 10:17
ИМХО где-то у тебя опечатка в декларации класса TComThread. Попробуй закоментить в классе все кроме первой и последней строчки.

Автор: Valeri 13.3.2007, 10:24
Но TComThread создается автоматом (самим Билдером). Опечатка не возможна

Автор: ama_kid 13.3.2007, 10:32
Тогда цепляй проект к своему посту - просто так гадать имхо бессмысленно...

Автор: pandrew 13.3.2007, 10:33
Первый раз слышу. Что за визард? Какой BCB? 
Кроме того в генерируемых визардами кодах регулярно бывали ошибки.

Автор: Fazil6 13.3.2007, 10:37
Цитата(pandrew @  13.3.2007,  09:33 Найти цитируемый пост)
Кроме того в генерируемых визардами кодах регулярно бывали ошибки.

например... ?

Автор: Valeri 13.3.2007, 10:47
Вот заголовочный файл модуля потока, автоматически генерируемый Билдером (BCB 6) :

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

#ifndef Unit4H
#define Unit4H
//---------------------------------------------------------------------------
#include <Classes.hpp>

//---------------------------------------------------------------------------
class TComThread : public TThread
{            
private:

protected:
        void __fastcall Execute();
public:
        __fastcall TComThread(bool CreateSuspended);

         //
};
//---------------------------------------------------------------------------
#endif


а ниже приведен заголовочный файл главной формы, где я хочу объявить поток типа TComThread :

#ifndef VelocityH
#define VelocityH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include "PERFGRAP.h"
#include <Menus.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
       
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall N8Click(TObject *Sender);
private:    // User declarations
        void __fastcall OnConnect();    

      TComThread *ComThread;//вот это объявление вызывает проблему

public:        // User declarations
HANDLE hCom;


 

struct Data_3byte
{
unsigned char RecByte1;
unsigned char RecByte2;
unsigned char RecByte3;
} Data;


unsigned short Fh; 
unsigned short Fh1, Fh2, Fh3, Fh4, Fh5, Fh6, Fh7, Fh8, Fh9;
float V;
int Nsect;
unsigned short RecByte;
float V1, V2, V3, V4, V5, V6, V7, V8, V9;

        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------

Дело в том, что если объявлять экземпляр потока где-то в другом модуле и там же запускать поток, то все нормально работает, но тогда нет возможности приостановить поток ComThread, так как он объявлен в какой-то функции (например в обработчике нажатия кнопки) и до него не добраться. А если бы удалось его объявить в классе основной формы, то можно было бы его запускать и останавливать, ссылаясь на эту форму. Но поток не удается объявить в классе формы (см. выше) а почему?

Автор: Fazil6 13.3.2007, 11:08
Цитата(Valeri @  13.3.2007,  09:47 Найти цитируемый пост)
а ниже приведен заголовочный файл главной формы, где я хочу объявить поток типа TComThread :

ну и где там инклуд твоего класса потока?

Автор: pandrew 13.3.2007, 11:10
И где в #include "Unit4.h" перед class TForm1?

Автор: Valeri 13.3.2007, 11:30
инклуд есть, но в самом модуле Velocity.cpp, а здесь его нет. вы правы. Включил инклуд в Velocity.h. Ошибка пропала. Спасибо всем за помощь. Надо быть внимательнее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)