rcmonitor Область видимости указателя pLabels - распостраняется только на конкретный метод в твоем случае. Этот указатель должен быть членом класса TForm1, желательно для него еще какую-нибудь обертку сделать.
Junior
Статус: Не в сети Регистрация: 06.09.2007 Откуда: Планета Земля
Помогите осуществить:
Делаю программу для тестирования процессора, делается на основе кнопки и таймера. При нажатии на кнопку, запускается таймер и выполняется некоторое действие миллион раз, после таймер останавливается и на основе кол-ва миллисекунд, подсчитывается кол-во баллов. Так оно в теории, а на практике, при запуске миллиона действий (for(i=0;i<1000000;i++)), программа висит и таймер не двигается с места, так оно и остается - 0 миллисекунд, что с этим делать???
Junior
Статус: Не в сети Регистрация: 06.09.2007 Откуда: Планета Земля
int i;
вот так в хидере, дело в том, что программа во время выполнения действия - как бы зависает, из-за этого таймер не двигается, потом все отмирает и нормально, но время, расхдуемое на выполнение действия не засекается
А нафига таймер то?? (я так понимаю речь идет о 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.
//после стрелки он, по идее, если всё правильно, должен выдавать список свойств, а вместо этого пишет: Unable to invoke Code Completion due to errors in source code
А если просто вручную написать что надо? У меня билдер частенько тупит, пишет такое, хотя все правильно написано, и если написать вручную - компилится.
А вообще лучше всего вариант 1.3 (с вектором) Добавлено спустя 23 минуты, 23 секунды З.Ы. Как минимум одна ошибка у тебя в примере - переменная объявлена как total, а используется Total - это раз. Второе, в методе RadioGroup1Click переменная Total вообще не объвлена, а ту что объявлена в конструкторе он ессно не видит.
большие/маленькие - это понятно, это я подправил, но он рутается на int total=10; в main.h.
или, если так: TLabel **pLabels = new TLabel*[10];, то на эту строку.
и у меня он, как раз, не компилицца
rcmonitor почитай какую нибудь книгу-учебник по синтаксису С++ (Страуструпа лучше всего), у тебя ересь написана, нельзя инициализировать переменные-члены (кроме константных) в определении класса, делай это в конструкторе. А описании класса только определения переменных.
Afx
Цитата:
// в заголовке #include <dos.h>
// в обработчике кнопки struct time A,B; gettime(&A); Sleep(1000); // задержка 1 сек. gettime(&B);
progn Согласен, переход через полночь мой вариант не учитывает. Но первый вариант будет работать всегда, хотя точность всего 1 сек.
А вообще Rius дело говорит, это самый точный вариант будет.
блинский
я понимаю, что вы все - мегаотцы, а я последний раз на с++ лабал в универе, и было это пёс знает когда.
может кто-нть просто выложить кусок грамотного кода, как сделать массив из TLable`ов, или типа того?
типа, в определении класса написать то-то, а в процедурах юзать так-то.
к учебникам я и сам отсылать умею.
Afx мне в большинстве случаев хватает clock(), точность микросекунда (т.е. обычно CLOCKS_PER_SEC == 1000). QueryPerformanceCounter() очень редко пользовал, винда не реалтайм ось, погрешность все равно большая.
во время компилляции выдаёт окно error: field form1->plabels does not have a corresponding component. remove the declaration? и, после нажатия "no" - устанавливает подсветку на строку:
Код:
TLabel **pLabels;
, и пишет ошибку: e2109 not an allowed type.
что за дичь?
с ошибкой: 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( *)`
rcmonitor Еще раз повторюсь - я не знаю VCL. Но думаю, что под Handle автор имел ввиду указатель на форму в которой требуется создать контрол. По скольку ты создаешь этот label внутри самого класса, то будет достаточным написать:
Код:
pLabels[i] = new TLabel(this);
Добавлено спустя 4 минуты, 47 секунд rcmonitor Пытаясь предсказать последующие проблемы, скажу, что наверняка у класса TLabel есть свойство Visible, которое требуется установить в значение true, если ты конечно хочешь увидеть то, что создал . Еще я кажется в кодах программистов VCL видел свойство Parent, которому нужно в твоем случае присвоить значение "this" незамедлительно после создания.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения