I am using a timer in my C++ code through setitimer function from sys/time.h. This maps the SIGALRM signal to my timer handler method. After this I am not able to use sleep function. I am assuming it is because sleep uses SIGALRM signal as well. Can you sugg开发者_运维知识库est any workaround for this problem?
Thanks for replying.
From the alarm(2) man page:
sleep()may be implemented usingSIGALRM; mixing calls toalarm()andsleep()is a bad idea.
Some implementations don't use SIGALRM, find a machine like that and you're set.  Otherwise, you can try nanosleep(); it's implemented safely.  From the nanosleep(2) man page:
Compared to
sleep(3)andusleep(3),nanosleep()has the advantage of not affecting any signals, it is standardized by POSIX, it provides higher timing resolution, and it allows to continue a sleep that has been interrupted by a signal more easily.
You can try using select() just as a timer. I don't know if it uses SIGALRM or not but it should be simple to test. Something like:
   timeval t = {1, 0};
   select(0, NULL, NULL, NULL, &t);
I'd use a library that gives an abstraction to these OS services. I use ACE library for timers and sleeps (ACE_OS::sleep, ACE_Reactor::schedule_timeout) and they work together without any problems. As far as I know ACE uses select for its timers. I guess boost::thread::sleep and boost::asio::deadline_timer will accomplish the task successfully as well.
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论