А если сделать грамотно? Вот так например:
Главный цикл потока приема сетевых данных:
- ждать управляющих событий или прихода данных.
- если пришли управляющие события, обработать их.
- если пришли данные
-- принять их
-- если полностью принят минимальный логический набор
--- лочить разделяемый ресурс
--- обновлять данные
--- отпускать ресурс
--- уведомлять другой поток о готовности данных.
Главный цикл потока отрисовки:
- установить значение таймаута, как вариант, в нулевое значение.
- ждать управляющих событий или уведомление о готовности данных или таймаут
- если пришли управляющие события, обработать их.
- если пришло уведомление о готовности данных
-- лочить разделяемый ресурс
-- считывать данные
-- отпускать ресурс
- если наступил таймаут, делать отрисовку.
Здесь обозначены только обсуждаемые аспекты, остальное опущено.
Вообще-то это учебник.
Где тут место для 5-10 секундных фризов?
И что тут занимает столько времени? Локирование и отпускание разделяемого ресурса или обновление данных или их считывание? Бред!