<Black Pahan> - Спасибо за инфу, подождем ...
<solosh> - Вы правы "
Сохраняется признак глобального состояния прерываний (разрешены/запрещены или текущий приоритет если есть таковой) плюс состояние флагов CPU.". Но дело то в том что "признак" я называю его маской прерываний запоминается в критической секции в стеке "старого/уходящего" процесса а новый признак востанавливается из стека "нового/приходящего" процесса. То есть все изменения сделанные в этой маске прерываний становяться не видными как только мы переключили процессы.
<sergeeff> - тут вопрос не в том что я хочу чего то - Критическая секция и сделана с этой целью чтобы отменить все прерывания и сохранить всю информацию о тех которые были разрешены до этого что бы можно было востановить их состояния. Критическая секция выполнена как объект в конструкторе которого все это "сохранение" и происходит а в деструкторе востанавливается. Но при переключении процесса деструктор то выполняется в контексте другого процесса. тоесть StatusReg будет другой! Вот в чем загвоздка!
Код
//-----------------------------------------------------------------------------
//
// The Critital Section Wrapper
//
//
class TCritSect
{
public:
TCritSect () : StatusReg(_xtos_ints_off(0xFFFFFFFF)) { }
~TCritSect() { _xtos_ints_on(StatusReg); }
private:
TStatusReg StatusReg;
};
Удачи всем.