2013-06-16 2 views
1

Я пишу небольшую программу для выполнения некоторых операций с базой данных и задаю небольшой вопрос о дизайне.Как проверить глобальные события внутри бесконечного цикла внутри класса?

Часть моей программы просматривает файл журнала изменений, и это включает в себя код, который завершается в классе. Таким образом, использование что-то вроде этого:

auto fileWatcher = new FileWatcher(fileName); 
fileWatcher.onChange(delegate); 
fileWatcher.start(); 

После того, как метод запуска называется петля вводится в классе и файл смотрел. Изменения обрабатываются через вызов зарегистрированного делегата. Цикл использует различные методы просмотра для разных платформ.

Что мне нужно сделать, это остановить текущие часы и изменить просмотренный файл.

Поскольку это в бесконечном цикле, я не могу проверить извне, то есть вне класса, если мне нужно выйти из цикла просто потому, что управление никогда не возвращается к вызывающей стороне метода start().

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

ответ

1

икру другой поток, чтобы сделать проверку

вы можете сделать в цикле с while(!atomicLoad(stop)){ и вызвать stop() метод, который задает поле член stop к true с аа atomicStore(stop,true) как из core.atomic

+0

Как я икру поток, используя функцию-член в D? –

+0

'spawn (& (cast (shared) this) .run);' –

+0

Неужели 'run' должен быть статическим? потому что я получаю сообщение об ошибке с помощью этого кода. то есть он не соответствует объявлению шаблона функции. У вас есть большой пример, пожалуйста? –

Смежные вопросы