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

Тема в разделе "Общие вопросы по С и С++", создана пользователем CONDOR, 2 апр 2007.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. CONDOR

    CONDOR Гость

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

    private:
    unsigned int TickCount; // счетчик "тиков"
    };
    Счетчик тиков увеличивается при каждом прерывании системного таймера. В качестве базового кода взят пример из хелпа BorlandC++ 3.1:
    Код (Text):
    /***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;
    }
    Прошу помочь мне разобраться с реализацией этого класса:
    Код (Text):
    #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*)())'
    Насколько я понял здесь произошло несовпадение типов, как исправить эти ошибки?
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Функция должна быть статическая, а может и вообще не член класса.
     
  3. akma

    akma Гость

    Код ( (Unknown Language)):
    #ifdef __cplusplus
    #define __CPPARGS ...
    #else
    #define __CPPARGS
    #endif
    что значит????????????????
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей