C
CONDOR
Нужно создать класс для измерения коротких промежутков времени:
Счетчик тиков увеличивается при каждом прерывании системного таймера. В качестве базового кода взят пример из хелпа BorlandC++ 3.1:
Прошу помочь мне разобраться с реализацией этого класса:
Выдает ошибки:
38: Member function must be called or its address taken.
38: Type mismatch in parameter '__ist' in call to 'setvect(int, void (interrupt far*)())'
Насколько я понял здесь произошло несовпадение типов, как исправить эти ошибки?
Код:
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*)())'
Насколько я понял здесь произошло несовпадение типов, как исправить эти ошибки?