发新话题
 搜藏 打印 该页面添加到 Mister Wong

多线程的sleep,静态链接 (转)

多线程的sleep,静态链接 (转)

转自: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左右。

    很好。

本文由magic 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-3260-1-1.html

相关主题

TOP

发新话题