转自:oliliango.cublog.cn
利用pthread库做多线程编程,如果使用简单的sleep系统调用,如果对pthread的实现不是很清楚的话,或者linux内核的sleep系统调用和pthread库配合的不是很好的话,在线程里面进行sleep系统调用的话,可能导致所有的线程休眠。或者在main函数里面调用sleep,在特定版本的linux内核中可能导致程序所有线程都休眠。这可能是不希望的,所以可以用异步IO实现“安全”的线程休眠。具体用select实现即可:
复制内容到剪贴板
代码:
int mySleep(unsigned int sleepSecond)
{
timeval t_timeval;
t_timeval.tv_sec = sleepSecond;
t_timeval.tv_usec = 0;
select( 0, NULL, NULL, NULL, &t_timeval );
return 0;
}这就可以绕过可能的“陷阱”。
在嵌入式应用里面,除去通用的库,出于空间的考虑,需要把一些程序进行静态链接,如果在实现sleep这个程序的时候,使用这个mySleep调用。进行静态链接的时候会产生出很大的可执行程序。
例如:
复制内容到剪贴板
代码:
int main(int argc,char ** argv)
{
if(argc ==2)
{
int secNumber=0;
secNumber=atoi(argv[1]);
mySleep(secNumber);
}
else
{
cout<<"Usage:"<<argv[0]<<" <second number>"<<endl;
}
return 0;
}进行:g++ -o sleep --static sleep.cpp
得到的sleep可执行程序超过了1M。
而使用传统的sleep系统调用编制sleep程序,在控制程序大小方面更好:
复制内容到剪贴板
代码:
int main(int argc,char ** argv)
{
if(argc == 2)
{
sleep(atoi(argv[1]));
}
else
{
printf("Usage:%s <sec Number>\n",argv[0]);
}
return 0;
}进行:gcc -o sleep --static sleep.c
得到的sleep可执行程序仅仅400K左右。
很好。