Сохранение основных данных в потоке, как обеспечить их запись перед выходом? - PullRequest
4 голосов
/ 08 апреля 2010

Таким образом, я сохраняю небольшие изображения в основные данные, которые занимают действительно короткое время, например, 0,2 секунды, но я делаю это, пока пользователь перелистывает представление прокрутки, так что чтобы улучшить отзывчивость, я перемещаю сохранение в поток. Это прекрасно работает, все сохраняется и приложение отзывчиво. Тем не менее, есть одна вещь в многопоточном документе core-data +, которая меня беспокоит:

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

Хорошо, как ты это делаешь? Это должно длиться ~ 0,2 секунды, и это случается редко, поскольку вероятность того, что приложение закроется, когда что-то сохраняется, очень мала. Как мне запустить что-то в главном потоке, чтобы приложение не закрывалось и не блокировало графический интерфейс?

Спасибо

1 Ответ

3 голосов
/ 08 апреля 2010

Сделайте, чтобы ваш поток сохранения установил флаг "в процессе сохранения", и чтобы основной поток проверил это в applicationWillTerminate: методе делегата приложения. Очевидно, вам нужно использовать мьютекс для синхронизации доступа к флагу между двумя потоками.

Если при попытке выхода из приложения выполняется сохранение, основной поток выполняет pthread_cond_wait; поток сохранения разбудит его с помощью pthread_cond_signal после завершения сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...