Используйте интервальный таймер Posix и сделайте так, чтобы он уведомлял через сигнал. Внутри функции обработчика сигнала почти ни одна из функций C, таких как printf (), не может быть использована, поскольку они не являются входящими.
Используйте один глобальный флаг, объявленный статическим изменчивым для обработки вашим обработчиком сигнала. Обработчик должен буквально иметь эту одну строку кода, и НИЧЕГО другого; Этот флаг должен влиять на управление потоком в другом месте в потоке 1 & Only в программе.
static volatile bool g_zig_instead_of_zag_flg = false;
...
void signal_handler_fnc()
g_zig_instead_of_zag_flg = true;
return
int main() {
if(false == g_zig_instead_of_zag) {
do_zag();
} else {
do_zig();
g_zig_instead_of_zag = false;
return 0;
}
Майкл Керриск Интерфейс программирования Linux содержит примеры обоих методов и еще несколько, но примеры содержат множество его собственных частных функций Вы должны начать работать, и примеры тщательно избегают многих ошибок, которые они должны исследовать, так что не очень.
Использование интервального таймера Poxix, который уведомляет через поток, делает все намного хуже, и AFAICT, этот метод уведомления в значительной степени бесполезен. Я только говорю, потому что я допускаю, что может быть НЕКОТОРЫЙ случай, когда ничего не делать в потоке main (), а все в потоке обработчика полезно, но я точно не могу вспомнить ни одного такого случая.