Такой вот код:
Код | #include <iostream> #include <signal.h> using namespace std;
static void onalrm(int signo) { cout << "breaked!"; return; }
int main() { signal(SIGALRM, onalrm); if(alarm(3)!=0) {cout << "signal already exists"<< endl; return -1;} while(1){ }; return 0; }
|
По идее, программа должна прерваться через 3 секунды, верно? Но она не прерывается. Что я делаю не так?
Заранее спасибо.
UPD: Проблема решена. Помогавшим спасибо. Также следует сказать, что проблема встала, вообще-то, в связи с попыткой прервать при помощи таймера операцию recv на сокете. По какой-то причине моя программа (на Ubuntu 11.04) отсылала сигнал SIGALRM с флагом SA_RESTART. Проблема была решена заменой строки
Код | signal(SIGALRM, onalrm);
|
на
Код | struct sigaction sa; sa.sa_handler = onalrm; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGALRM, &sa, NULL) == -1) cout << "Can't set sigaction!"<<endl;
|
|