つまり、2 つのスレッドがあります。1 つはカーネルを実行し、もう 1 つはアプリを実行していますか? カーネル内の関数に 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 に依存しますが、これが要点です。
ジョン。