1초에 한 번씩 특정 함수를 호출하는 방법없나요?

익명 사용자의 이미지

#include

void foo( int sig )
{
alarm( 1 );
...
}

main()
{
signal( SIGALRM, foo );
alarm( 1 );
...
}

이 방법이 있긴 한데 해보니까 가끔씩 foo를 콜하지 않고 생략(?)하더군
요.

다른 프로그램이 많이 돌면 돌 수록 더 많이 생략하더라구요.

좋은 방법없을까요?

익명 사용자의 이미지

안녕하세요..
alarm()
말고 sleep()를 쓰시죠..

#include

unsigned int sleep(unsigned int seconds)

man 3번 섹션을 보시면 나와 있네요.

yootiong wrote..
#include <signal.h>

void foo( int sig )
{
alarm( 1 );
...
}

main()
{
signal( SIGALRM, foo );
alarm( 1 );
...
}

이 방법이 있긴 한데 해보니까 가끔씩 foo를 콜하지 않고 생략(?)하더군
요.

다른 프로그램이 많이 돌면 돌 수록 더 많이 생략하더라구요.

좋은 방법없을까요?

익명 사용자의 이미지

죄송하지만 전혀 이해가 안가는 데요.

어떻게 sleep함수로 1초에 한 번씩 특정함수를 호출할 수 있죠?

while( 1 )
{
sleep( 1 );
func();
}

이런 방법은 아닐 텐데요.

func함수도 수행되는 시간이 있기 때문에 정확하게 1초가 될 수 없고 또
한 sleep하는 동안 아무 것도 할 수가 없는 데요...

sleep함수를 어떻게 써야 하죠?

--
나는 언제나 하이파이브에 목마르다.( 유수영, 2002 )
http//myhome.hananet.net/~yootiong/

익명 사용자의 이미지

#include
#include
#include

void sigalrm( int sig )
{
...
}

main()
{
struct itimerval ival, oval;
struct sigaction si, so;

memset( &si, 0x00, sizeof( si ) );
memset( &so, 0x00, sizeof( so ) );
si.sa_handler = sigalrm;
sigaction( SIGALRM, &si, &so );

memset( &ival, 0x00, sizeof( ival ) );
memset( &oval, 0x00, sizeof( oval ) );

ival.it_interval.tv_usec = 1000000;
ival.it_value.tv_sec = 1;
setitimer( ITIMER_REAL, &ival, &oval );

...
}

--
나는 언제나 하이파이브에 목마르다.( 유수영, 2002 )
http//myhome.hananet.net/~yootiong/

익명 사용자의 이미지


목마르면 음료수 한잔 하세요..

음료수 없으면 물이라도 한잔......^,.^;;