LINUX.ORG.RU

потоки и сигналы.


0

0

Народ, столкнулся с такой проблемой: писал программу для embedded системы и вылезла непонятная штука, когда я запускаю эту программу на рабочей машине (на которой она и разрабатывается) то все работает отлично, а на маленькой процесс, а точнее его основной поток, не хочет реагировать на сигнал от таймера (SIGVALRM). После этого я написал тестовую програмку:

#include <stdio.h>
#include <signal.h>
#include <sys/time.h>

struct itimerval timer;
void timer_handler (int);
void* thread_func ( void* );

int main()
{

pthread_t thread_id;

sigset_t sigmask;
sigemptyset(&sigmask);
sigaddset(&sigmask, SIGALRM);
sigprocmask(SIG_BLOCK,&sigmask,0);

struct sigaction sa;
memset (&sa, 0, sizeof(sa));
sa.sa_handler = &timer_handler;
sigaction ( SIGALRM, &sa, NULL );

pthread_create (&thread_id, NULL, &thread_func, NULL);
pthread_sigmask(SIG_UNBLOCK,&sigmask,0);
pthread_join ( thread_id, NULL);
return 0;
}

void* thread_func (void* unused)
{
struct itimerval timer;
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 50000;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 50000;
setitimer ( ITIMER_REAL, &timer, NULL );
sleep(1);
}

void timer_handler (int signum)
{
printf("test\n");
}

По идеи должна выводиться надпись 'test', но на маленькой машинке этого не происходит! Я даже версии ядер одинаковые поставил с похожими конфигами (2.6.11). Подскажите в чем тут может быть дело?

anonymous

Как я понял все embedded programers на этом форуме шифруются :) Пора выходить из тени.

А если серьезно. Что за процессор используеш? И какая libc на тагете?

bizon_art
()
Ответ на: комментарий от bizon_art

Линуксом процессор определяется как i486, в реальности это 'x86 based STPC ATLAS microprocessor', libc-2.3.2 я взял из debian. Еще хотел бы пояснить смысл этой програмки. Сначала блокируется сигнал от таймера для всего процесса, потом создается новый поток, наследующий сигнальную маску процесса и после этого сигнал разблокируется в маске основного потока, В результате этого основной поток реагирует на сигнал от таймера, а созданный нет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.