А все-таки интересно, если-бы я все сделал по-старому и создал два экзампляра класса - чей метод вызвало-бы прерывание?
Все зависит от реализации. Но без дополнительных усилий - ничей. Посколько сама по себе статическая функция не знает о существовании экземпляров класса. Ей нужно откуда то получать ссылки или указатели на них. Пример:
// декларация (.H файл)
class InterruptHandler
{
public:
static interrupt Handler();
InterruptHandler();
~InterruptHandler();
void SomeMethod();
private:
static list<InterruptHandler*> list_;
static void (*oldHandler_)();
};
// реализация (.CPP файл)
list<InterruptHandler*> InterruptHandler::list_;
void (*InterruptHandler::oldHandler_)();
InterruptHandler::InterruptHandler()
{
if (list_.empty())
{
oldHandler_=getvect(9);
setvect(9, &Handler);
}
stack_.push_front(this);
}
InterruptHandler::~InterruptHandler()
{
list_.remove(this);
if (stack_.empty())
{
setvect(9, oldHandler_);
}
}
InterruptHandler::Handler()
{
// Запрет прерываний
list<InterruptHandler*>::iterator i;
for (i=list_.begin(); i!=list_.end(); ++i)
{
i->SomeMethod();
}
// разрешение прерываний
}
InterruptHandler::SomeMethod()
{
// Что-то нужное
}
Я попробую сделать все следующим образом: создам экземпляр класса и функцию-обработчик, не являющуюся членом класса. Эта функция будет вызивать метод обьекта, отвечающий за добавление событий в очередь.
А очередь где будеш хранить?