lua-users home
lua-l archive

Re: Sleeping forever

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


It was thus said that the Great Laurent FAILLIE once stated:
> Hello,
> I'm writting a bridge from incoming MQTT messages (using paho.mqtt
> library) to Postgresql database insertion using pgmoon. As this tool will
> be only even driven and as all the processing will be done in the MQTT
> callback, my tool will have nothing to do in its main loop. Which is the
> best way the handle this infinite "do nothing" ? The target system is
> Linux so I can obviously use POSIX stuffs.
 Well ... several ways ...
	while(1)
	 pause();
 This will sleep until the next signal happens. 
	while(1)
	 select(0,NULL,NULL,NULL,0);
 will also block indefinitely unless a signal happens (and system calls
aren't restarted as an option).
	while(1)
	 sleep(UINT_MAX);
will sleep until a signal happens. This may use SIGALRM so avoid if you
need to handle that signal.
	while(1)
	 clock_nanosleep(
		CLOCK_REALTIME,
		TIMER_ABSTIME,
		(strct timespec)&{
			.tv_sec = (time_t)-1,
			.tv_nsec = 0
		},
		NULL);
Like the sleep() one, only it doesn't use SIGALRM. 
 My preference is for calling pause(). 
 -spc

AltStyle によって変換されたページ (->オリジナル) /