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