0

機能の使用に関していくつかの問題に直面していsetitimerます。

コードを実行すると、期待される結果が表示されませんでした。シグナル ハンドルは、メイン関数printf( )の一部にコメントを付けるとwhile(1)機能します (これはビジー状態で実行中のコードです)。私の理解では、両方 (main( )およびsignal_handler()) は、Linux スケジューラに応じて、タイム スライス方式または並列で実行する必要があります。

私の理解をデバッグまたは修正するのを手伝ってくれる人はいますか?

コードは次のとおりです。

void timer_handler (int signum) {

    printf("...\n"); 
    printf ("Timer expired %d times\n", ++count);
} 

void Tmr_Init(void) {

    struct sigaction sa;
    struct itimerval timer; 

    memset (&sa, 0, sizeof (sa));
    sa.sa_handler = &timer_handler; 
    sigaction (SIGPROF, &sa, NULL);timer.it_value.tv_sec = 2;

    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 1;
    timer.it_interval.tv_usec = 0;

    setitimer (ITIMER_PROF, &timer, NULL);
} 

int main () {

    Tmr_Init(); 

    /* Do busy work. */
    while (1) {
        printf("In main!!\n"); 
        sleep(2);
    }

    return 0;
} 
4

0 に答える 0