• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы 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
что значит????????????????
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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