Нет, всё так же. Синхронизация не помогла. Определённо, там ещё траблы в том, что происходит обращение к графике из дочернего процеса (в котором таймер запущен), а он доступа с ней не имеет, или что-то там не реинтерабельное. Лучше, IMHO, эту функцию вызывать раз или три в секунду из бесконечного цикла for, и в нём же SDL_Delay поставить - это просто для того, чтобы систему бесконечными циклами не грузить - не всякой системе, повторяюсь, это нравится - под 98-й виндой даже мышь переставала иногда отзываться.
Да, это здорого, что в бесконечном цикле внутри SDL стоит SDL_Delay - это даёт продых остальным процессам. Вот только сама эта функция вызывается из ДРУГОГОЙ нити, как минимум. А, часто, и из другого процесса, правда дочернего. Как доказательство - как иначе бы это работало, если ваша программа состоит из одного бесконечного цикла? Да и смотрю сейчас на исходники - одни нити... Вот в них и проблемма:
Код: Выделить всё
/* This is only called if the event thread is not running */
int SDL_SYS_TimerInit(void)
{
timer_alive = 1;
timer = SDL_CreateThread(RunTimer, NULL); // <- Тут создаётся нить!
if ( timer == NULL )
return(-1);
return(SDL_SetTimerThreaded(1));
}
В общем, тема, как кажется закрыта. По-моему доходчиво обьяснил в чём проблеммы. Ждём новых версий!
