MagnificentО конкретном ограничении не слышал. Не знаю, какие проверки требуются в Вашем случае, но я бы попробовал несколько потоков с отдельными проверками заменить на последовательные проверки в одном потоке, если это возможно, так более надёжно будет. Использовал startThread только один раз (нужен был вызов функции каждый раз, когда герой получает опыт), всё хорошо работало, ставил sleep(5). Зависание возможно из-за бесконечного цикла (где-то там, где у Вас --some code)?
Цикла бесконечного нет, там условие очень специфичное, я дебажил. Один из примеров, где я использовал startThread - это проверка, что у вражеского игрока нет городов и героев (кроме резервных). С таким подходом код, как мне видится, будет чище и проще.
Если же делать эту проверку триггерами, то получится, что одну функцию придётся прописать в нескольких местах - в функции, триггерируемой потерей героя, в функциях, триггерируемых захватом городов (а каждая группа городов имеет свою отдельную функцию-обработчик). Это делает поддержку кода более сложной.
Плюс проверка разовых событий - для new day триггер-функции я планировал прописывать именно что регулярные события, чтобы не перегружать её.