• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Класс для обработки прерывания таймера

  • Автор темы CONDOR
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

CONDOR

Нужно создать класс для измерения коротких промежутков времени:
Код:
class TickTime{
public:
void Start(); //запуск таймера 
void Stop(); // остановка таймера 
void Output(); //вывести сколько натикало 

private:
unsigned int TickCount; // счетчик "тиков" 
};

Счетчик тиков увеличивается при каждом прерывании системного таймера. В качестве базового кода взят пример из хелпа BorlandC++ 3.1:
Код:
/***NOTE:
This is an interrupt service routine. You can NOT compile this
program with Test Stack Overflow turned on and get an executable
file which will operate correctly. */

#include <stdio.h>
#include <dos.h>
#include <conio.h>

#define INTR 0X1C	/* The clock tick interrupt */

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

void interrupt ( *oldhandler)(__CPPARGS);

int count=0;

void interrupt handler(__CPPARGS)
{
/* increase the global counter */
count++;

/* call the old routine */
oldhandler();
}

int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);

/* install the new interrupt handler */
setvect(INTR, handler);

/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);

/* reset the old interrupt handler */
setvect(INTR, oldhandler);

return 0;
}

Прошу помочь мне разобраться с реализацией этого класса:
Код:
#define INTR 0X1C

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

#include <dos.h>
#include <conio.h>
#include <iostream.h>

class TickTime{
public:
void Start();
void Stop();
void Output();

private:
void interrupt (* oldhandler)(__CPPARGS);
void interrupt handler(__CPPARGS);
unsigned int TickCount;
};

void interrupt TickTime::handler(__CPPARGS)
{
TickCount++;
oldhandler();
}

void TickTime::Start()
{
TickCount=0;
oldhandler = getvect(INTR);
setvect(INTR, handler);
}

void TickTime::Stop()
{
setvect(INTR, oldhandler);
}

void TickTime::Output()
{
cout << "\nTickTime = " << TickCount;
}

int main()
{
TickTime t;
t.Start();
for(int i=0; i<1000; i++)
delay(0);
t.Stop();
t.Output();
getch();
return 0;
}
Выдает ошибки:
38: Member function must be called or its address taken.
38: Type mismatch in parameter '__ist' in call to 'setvect(int, void (interrupt far*)())'
Насколько я понял здесь произошло несовпадение типов, как исправить эти ошибки?
 
G

grigsoft

Функция должна быть статическая, а может и вообще не член класса.
 
A

akma

Код:
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
что значит????????????????
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!