Обработка прерываний в C ++ - PullRequest
2 голосов
/ 10 апреля 2009

Я пишу фреймворк для встроенного устройства, которое может запускать несколько приложений. При переключении между приложениями, как я могу убедиться, что состояние моего текущего приложения очищено правильно? Например, скажем, я выполняю интенсивный цикл в одном приложении, и делается запрос на запуск второго приложения, пока этот цикл еще не завершен. Я не могу удалить объект, содержащий цикл, пока цикл не завершится, но я не уверен, как убедиться, что объект цикла находится в состоянии, готовом для удаления. Нужен ли какой-нибудь механизм опроса или обратный вызов события, который уведомляет меня о завершении?

Спасибо.

Ответы [ 3 ]

1 голос
/ 10 апреля 2009

Итак, у вас есть два потока: один работает с ядром, а другой - с приложением? Вам нужно будет сделать функцию в вашем ядре, скажем, 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, но это суть.

Джон.

1 голос
/ 10 апреля 2009

Обычно, если вам нужно сделать что-то подобное, у вас будет ОС / ОСРВ, которая может выполнять несколько задач (даже если ОС - простая вещь доморощенного типа).

Если у вас еще нет ОСРВ, возможно, вы захотите взглянуть на нее (доступно несколько сотен) или включить что-то простое, например, протопотоки:

0 голосов
/ 10 апреля 2009

(1) Вам нужно написать потокобезопасный код. Это не относится только к встроенным системам.

(2) Вам нужно сохранить состояние, когда вы делаете переключение контекста.

...