linux c 子线程sleep,linux c之sleep的多种实现
#include
#include
#include
//使用select實現精確到1微秒(0.000001秒)的sleep
void sleep_us(unsigned int nusecs)
{
struct timevaltval;
tval.tv_sec = nusecs / 1000000;
tval.tv_usec = nusecs % 1000000;
select(0, NULL, NULL, NULL, &tval);
}
int main()
{
printf("start\n");
system("date");
sleep_us(30000);//單位微妙
printf("end\n");
system("date");
return 0;
}
#include
#include
#include
#include
static void
sig_alrm(int signo)
{
/* nothing to do, just return to wake up the pause */
}
//使用 alarm 實現精確到秒的sleep,單位秒
unsigned int sleep1(unsigned int seconds)
{
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
return(seconds);
alarm(seconds);/* start the timer */
pause();/* next caught signal wakes us up */
return(alarm(0));/* turn off timer, return unslept time */
}
int main()
{
printf("start sleep1\n");
system("date");
sleep1(3);
printf("end\n");
system("date");
return 0;
}
#include
#include
#include
#include
#include
static jmp_bufenv_alrm;
static void
sig_alrm(int signo)
{
longjmp(env_alrm, 1);
}
//使用setjmp 實現精確到秒的sleep,單位秒
unsigned int sleep2(unsigned int seconds)
{
if (signal(SIGALRM, sig_alrm) == SIG_ERR)
return(seconds);
if (setjmp(env_alrm) == 0) {
alarm(seconds);/* start the timer */
pause();/* next caught signal wakes us up */
}
return(alarm(0));/* turn off timer, return unslept time */
}
int main()
{
printf("start sleep2\n");
system("date");
sleep2(3);
printf("end\n");
system("date");
return 0;
}
總結
以上是生活随笔為你收集整理的linux c 子线程sleep,linux c之sleep的多种实现的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: jbutton添加点击事件_electr
- 下一篇: php点链接直接现在文件吗,PHP实现点