Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 421 • Страница 16 из 22<  1 ... 13  14  15  16  17  18  19 ... 22  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor
Область видимости указателя pLabels - распостраняется только на конкретный метод в твоем случае. Этот указатель должен быть членом класса TForm1, желательно для него еще какую-нибудь обертку сделать.



Партнер
 

Junior
Статус: Не в сети
Регистрация: 06.09.2007
Откуда: Планета Земля
Помогите осуществить:
Делаю программу для тестирования процессора, делается на основе кнопки и таймера. При нажатии на кнопку, запускается таймер и выполняется некоторое действие миллион раз, после таймер останавливается и на основе кол-ва миллисекунд, подсчитывается кол-во баллов. Так оно в теории, а на практике, при запуске миллиона действий (for(i=0;i<1000000;i++)), программа висит и таймер не двигается с места, так оно и остается - 0 миллисекунд, что с этим делать???


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
а какова типа у тя i?
Добавлено спустя 2 часа, 44 минуты, 16 секунд
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TRadioGroup *RadioGroup1;
int total=10; //пишет: incorrect field declaration
TLabel **pLabels = new TLabel*[Total];
TLabel *Label1;
TPanel *Panel1;
TLabel *Label2;
TLabel *Label3;
void __fastcall RadioGroup1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};


 

Junior
Статус: Не в сети
Регистрация: 06.09.2007
Откуда: Планета Земля
int i;
вот так в хидере, дело в том, что программа во время выполнения действия - как бы зависает, из-за этого таймер не двигается, потом все отмирает и нормально, но время, расхдуемое на выполнение действия не засекается


 

Member
Статус: Не в сети
Регистрация: 01.12.2006
А нафига таймер то?? (я так понимаю речь идет о TTimer ?) Время засекать можно так: перед началом цикла
long A; time(&A);
после когца цикла
long B; time(&B);
Потом выводишь B-A. Правда, точность тут только до секунды.
Добавлено спустя 19 минут, 44 секунды
З.Ы. Есть еще функция gettime, глянь в хелпе, у нее точность до 10 мс (хотя реально скорее все же 50 мс, т.к. все эти библиотечные функции юзают системный таймер, у которого частота 18 гц ~ 55 мс один такт)

Вот я например как сделал:

// в заголовке
#include <dos.h>


// в обработчике кнопки
struct time A,B;
gettime(&A);
Sleep(1000); // задержка 1 сек.
gettime(&B);

// вывести время в мс
ShowMessage((B.ti_hour - A.ti_hour)*3600000 + (B.ti_min - A.ti_min)*60000 +
(B.ti_sec - A.ti_sec)* 1000 + (B.ti_hund - A.ti_hund)*10);
// выдает иногда 990, иногда 1000.


 

Member
Статус: Не в сети
Регистрация: 11.11.2004
Откуда: Челябинск
ещё точнее с помощью QueryPerformanceCounter() и QueryPerformanceFrequency()

_________________
пишу я программу... и вдруг на клавиатуру выползает bug, буквально


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
дык чо, кто-нть паможет насчёт массива из TLabel?
можт, я что-то не там объявляю? (см листинг выше)


 

Member
Статус: Не в сети
Регистрация: 01.12.2006
rcmonitor
Цитата:
//после стрелки он, по идее, если всё правильно, должен выдавать список свойств, а вместо этого пишет: Unable to invoke Code Completion due to errors in source code

А если просто вручную написать что надо? У меня билдер частенько тупит, пишет такое, хотя все правильно написано, и если написать вручную - компилится.

А вообще лучше всего вариант 1.3 (с вектором)
Добавлено спустя 23 минуты, 23 секунды
З.Ы. Как минимум одна ошибка у тебя в примере - переменная объявлена как total, а используется Total - это раз. Второе, в методе RadioGroup1Click переменная Total вообще не объвлена, а ту что объявлена в конструкторе он ессно не видит.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
большие/маленькие - это понятно, это я подправил, но он рутается на int total=10; в main.h.
или, если так: TLabel **pLabels = new TLabel*[10];, то на эту строку.
и у меня он, как раз, не компилицца


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
rcmonitor
почитай какую нибудь книгу-учебник по синтаксису С++ (Страуструпа лучше всего), у тебя ересь написана, нельзя инициализировать переменные-члены (кроме константных) в определении класса, делай это в конструкторе. А описании класса только определения переменных.

Afx
Цитата:
// в заголовке
#include <dos.h>


// в обработчике кнопки
struct time A,B;
gettime(&A);
Sleep(1000); // задержка 1 сек.
gettime(&B);

// вывести время в мс
ShowMessage((B.ti_hour - A.ti_hour)*3600000 + (B.ti_min - A.ti_min)*60000 +
(B.ti_sec - A.ti_sec)* 1000 + (B.ti_hund - A.ti_hund)*10);


зачем так сложно? :) а вдруг мы ночью в 23:59:59 запустим, и вместо Sleep(1000) будет Sleep(2000) ;)


это переносимый код, будет работать под любой операционкой:

#include <time.h>
....

clock_t t1 = clock();

...

clock_t t2 = clock();
double time_sec = double(t2-t1) / CLOCKS_PER_SEC; //время в секундах


 

Member
Статус: Не в сети
Регистрация: 01.12.2006
progn Согласен, переход через полночь мой вариант не учитывает. Но первый вариант будет работать всегда, хотя точность всего 1 сек.
А вообще Rius дело говорит, это самый точный вариант будет.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
блинский
я понимаю, что вы все - мегаотцы, а я последний раз на с++ лабал в универе, и было это пёс знает когда.
может кто-нть просто выложить кусок грамотного кода, как сделать массив из TLable`ов, или типа того?
типа, в определении класса написать то-то, а в процедурах юзать так-то.
к учебникам я и сам отсылать умею.


 

Junior
Статус: Не в сети
Регистрация: 06.09.2007
Откуда: Планета Земля
Rius писал(а):
ещё точнее с помощью QueryPerformanceCounter() и QueryPerformanceFrequency()

А эти две что делают??


 

Member
Статус: Не в сети
Регистрация: 15.08.2007
Afx
мне в большинстве случаев хватает clock(), точность микросекунда (т.е. обычно CLOCKS_PER_SEC == 1000). QueryPerformanceCounter() очень редко пользовал, винда не реалтайм ось, погрешность все равно большая.


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor
Я в больнице был 10 дней, поэтому не отвечал. Тебя еще что-нибудь интерисует? :)

rcmonitor писал(а):
int total=10; //пишет: incorrect field declaration
TLabel **pLabels = new TLabel*[Total];


Тебе нужно в объявлении класса написать просто:
Код:
TLabel **pLabels;

А после уже в конструкторе формы или в другом месте, где тебе нужно создать твои лейблы, ты напишешь:
Код:
int total = 10;
pLabels  = new TLabel*[Total];

Ну и дальше, как ты писал. Надеюсь ты еще не отчаялся и язык не забросил ;).


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
спасибо, что отреагировал.
надеюсь, в больнице отлежал с пользой //сам перед новым годом отвалялся - жесть полная.

вот содержимое файла boost_main.h:
Код:
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TGroupBox *GroupBox1;
        TRadioGroup *RadioGroup1;

        TLabel **pLabels;
        TLabel *Label1;
        TPanel *Panel1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *lab;
        void __fastcall RadioGroup1Click(TObject *Sender);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
};

а это - содержимое файла boost_main.cpp:
Код:
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
int ltotal = 10;
pLabels = new TLabel*[ltotal];  //   TLabel **
for(int i=0; i<ltotal; ++i)
  {
  //pLabels[i] = new TLabel(Handle);
  pLabels[i]->Left = 100;
  pLabels[i]->Top = 100+i*100;
  pLabels[i]->Caption = IntToStr(i);
  //pLabels[i]->
  }
}

во время компилляции выдаёт окно error:
field form1->plabels does not have a corresponding component. remove the declaration?
и, после нажатия "no" - устанавливает подсветку на строку:
Код:
        TLabel **pLabels;

, и пишет ошибку: e2109 not an allowed type.
что за дичь?


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor
Перенеси
Код:
TLabel **pLabels;

после
Код:
public:      // User declarations

И думаю не должен ругаться.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
о!
супер!
атэц!
тока типерь вот какая засада - в этом куске кода (при клике по радиогруппе)
Код:
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
int ltotal = 10;
pLabels = new TLabel*[ltotal];  //   TLabel **
for(int i=1; i<ltotal; ++i)
  {
  //pLabels[i] = new TLabel(Handle);
  pLabels[i]->Left = 100;
  pLabels[i]->Top = 100+i*100;
  pLabels[i]->Caption = IntToStr(i);
  //pLabels[i]->
  }

вылетает на строке:
Код:
plabels[i]->left = 100;
с ошибкой: project boost.exe raised exception class eaclassviolation with message.....

при трассировке до этой строки показывает:
ltotal = 0
i = 0
plabels = 00974f40
plabels[i] = 01196764
plabels[i]->left = ????
plabels[i]->top = ????
plabels[i]->caption = e2122 function call terminated by unhandled exception 0xc0000005 at adress 0x0
есть мысль, что какой-то косяк при выделении памяти, но при попытке добавить строку
Код:
pLabels[i] = new TLabel(Handle);
- как советует автор метода, отладчик на неё ругается с ошибкой: e2285 could not find a match for `tlabel::tlabel( *)`


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
rcmonitor
Еще раз повторюсь - я не знаю VCL. Но думаю, что под Handle автор имел ввиду указатель на форму в которой требуется создать контрол. По скольку ты создаешь этот label внутри самого класса, то будет достаточным написать:
Код:
pLabels[i] = new TLabel(this);

Добавлено спустя 4 минуты, 47 секунд
rcmonitor
Пытаясь предсказать последующие проблемы, скажу, что наверняка у класса TLabel есть свойство Visible, которое требуется установить в значение true, если ты конечно хочешь увидеть то, что создал :). Еще я кажется в кодах программистов VCL видел свойство Parent, которому нужно в твоем случае присвоить значение "this" незамедлительно после создания.


 

Member
Статус: Не в сети
Регистрация: 09.07.2007
блинский - не просто атэц, а мегаатэц!!!!
спасибо, риспект и уважуха.
Код:
  pLabels[i]->Parent = GroupBox1;

эт чтоб собрать на одной панельке по смыслу, можт, каму пригадицца


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 421 • Страница 16 из 22<  1 ... 13  14  15  16  17  18  19 ... 22  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan