1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

Статус темы:
Закрыта.
  1. CONDOR

    CONDOR Гость

    Репутация:
    0
    Нужно создать класс для измерения коротких промежутков времени:
    Код:
    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*)())'
    Насколько я понял здесь произошло несовпадение типов, как исправить эти ошибки?
     
  2. grigsoft

    grigsoft Well-Known Member

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

    akma Гость

    Репутация:
    0
    Код:
    #ifdef __cplusplus
    #define __CPPARGS ...
    #else
    #define __CPPARGS
    #endif
    что значит????????????????
     
Загрузка...
Статус темы:
Закрыта.

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