Итак, у вас есть два потока: один работает с ядром, а другой - с приложением? Вам нужно будет сделать функцию в вашем ядре, скажем, ReadyToYield (), которую приложение может вызывать, когда вы готовы закрыть ее. ReadyToYield () будет отмечать поток ядра, чтобы сообщить ему хорошие новости, а затем сидеть и ждать, пока поток ядра решит, что делать. Это может выглядеть примерно так:
volatile bool appWaitingOnKernel = false;
volatile bool continueWaitingForKernel;
В теме вызова приложения:
void ReadyToYield(void)
{
continueWaitingForKernel = true;
appWaitingOnKernel = true;
while(continueWaitingForKernel == true);
}
В потоке ядра вызов:
void CheckForWaitingApp(void)
{
if(appWaitingOnKernel == true)
{
appWaitingOnKernel = false;
if(needToDeleteApp)
DeleteApp();
else
continueWaitingForKernel = false;
}
}
Очевидно, что фактическая реализация здесь зависит от базовой O / S, но это суть.
Джон.