Подобно этому вопросу , я хотел бы ограничить время выполнения функции - предпочтительно с точностью до микросекунды - в C. Я полагаю, что исключения C ++ могут использоваться для достижения аналогичного результата это решение Python. Хотя он не идеален, такой подход совершенно недоступен на простом C.
Интересно, а как я могу прервать выполнение функции через определенный промежуток времени в C в системе Posix? Для относительно простых ситуаций немного «глупый бизнес» работает просто отлично, но это добавляет изрядное количество кода, ортогонального к решению проблемы. Допустим, у меня есть такая функция:
void boil(egg *e) {
while (true)
do_boil(e);
}
Я хочу запустить варить на яйце *, прерывая его каждые 50 мкс, чтобы проверить, что-то вроде этого:
egg *e = init_egg();
while (true) {
preempt_in(50, (void) (*boil), 1, e);
/* Now boil(e) is executed for 50μs,
then control flow is returned to the
statement prior to the call to preempt_in.
*/
if (e->cooked_val > 100)
break;
}
Я понимаю, что для этого можно использовать pthreads, но я скорее заинтересован в том, чтобы избежать их использования. Я мог бы переключаться между ucontext_t в обработчике SIGALRM, но стандарт POSIX отмечает, что использование setcontext / swapcontext не должно использоваться в обработчике сигналов, и, действительно, я отмечаю различное поведение между системами Linux и Solaris при этом.
Возможен ли этот эффект для достижения? Если да, то портативным способом?