程序休眠问题的C代码实现
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
问题描述
编写代码用于实现程序的休眠,例如,如果要求程序休眠10秒钟,那么在这10秒内程序要一直等待,而不执行任何操作。
解决思路
在Linux下,有一个select函数用于实现进程的阻塞,该函数的原型是:
int select(int n, fd_set *readfds,fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
可以用该函数来实现程序的休眠。
C代码实现
/**********************************************************************
* 版权所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名称:Sleep.c
* 文件标识:无
* 内容摘要:演示休眠程序的编写及调用
* 其它说明:无
* 当前版本:V1.0
* 作 者:Zhou Zhaoxiong
* 完成日期:20150430
*
**********************************************************************/
#include
#include
#include
#include
// 重定义数据类型
typedef unsigned char UINT8;
typedef unsigned short int UINT16;
typedef unsigned int UINT32;
typedef signed int INT32;
typedef long int LONG;
// 结构体定义
typedef struct
{
UINT8 second; /* 0-59 */
UINT8 minute; /* 0-59 */
UINT8 hour; /* 0-23 */
UINT8 day; /* 1-31 */
UINT8 month; /* 1-12 */
UINT16 year; /* 1994-2099 */
UINT8 week; /* 1-7 */
UINT8 Count10ms; /* 0-99 */
} ClockStruc;
// 函数声明
void GetCurrentTime(ClockStruc *ptClock);
void Sleep(UINT32 iCountMs);
INT32 main();
/**********************************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:无
* 返 回 值:无
* 其它说明:无
* 修改日期 版本号 修改人 修改内容
* ---------------------------------------------------------------
* 20150430 V1.0 Zhou Zhaoxiong 创建
***********************************************************************/
INT32 main()
{
UINT8 szCurrentTime[50] = {0};
ClockStruc tClock = {0};
// 开始日期
GetCurrentTime(&tClock);
// 打印开始时间(YYYY.MM.DD HH:MIN:SS)
snprintf(szCurrentTime, sizeof(szCurrentTime) - 1, "%04d.%02d.%02d %02d:%02d:%02d", tClock.year, tClock.month, tClock.day,
tClock.hour, tClock.minute, tClock.second);
printf("Begin time: %s\n", szCurrentTime);
// 休眠10s
Sleep(10 * 1000);
// 结束日期
GetCurrentTime(&tClock);
// 打印结束时间(YYYY.MM.DD HH:MIN:SS)
snprintf(szCurrentTime, sizeof(szCurrentTime) - 1, "%04d.%02d.%02d %02d:%02d:%02d", tClock.year, tClock.month, tClock.day,
tClock.hour, tClock.minute, tClock.second);
printf("End time: %s\n", szCurrentTime);
return 0; // main函数返回0
}
/**********************************************************************
* 功能描述: 获取当前时间
* 输入参数: ptClock-时间结构体
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期 版本号 修改人 修改内容
* ------------------------------------------------------------------
* 20150430 V1.0 Zhou Zhaoxiong 创建
********************************************************************/
void GetCurrentTime(ClockStruc *ptClock)
{
LONG iDate = 0;
struct tm *ptTime = NULL;
struct timeval t_timeval = {0};
gettimeofday(&t_timeval, NULL);
iDate = t_timeval.tv_sec;
ptTime = localtime(&iDate);
ptClock->Count10ms = t_timeval.tv_usec / 10000;
ptClock->year = (UINT16)(ptTime->tm_year + 1900);
ptClock->month = (UINT8)ptTime->tm_mon + 1;
ptClock->day = (UINT8)ptTime->tm_mday;
ptClock->hour = (UINT8)ptTime->tm_hour;
ptClock->minute = (UINT8)ptTime->tm_min;
ptClock->second = (UINT8)ptTime->tm_sec;
ptClock->week = (UINT8)ptTime->tm_wday;
if (ptClock->week == 0)
{
ptClock->week = 7;
}
}
/**********************************************************************
* 功能描述: 程序休眠
* 输入参数: iCountMs-休眠时间(单位:ms)
* 输出参数: 无
* 返 回 值: 无
* 其它说明: 无
* 修改日期 版本号 修改人 修改内容
* ------------------------------------------------------------------
* 20150430 V1.0 Zhou Zhaoxiong 创建
********************************************************************/
void Sleep(UINT32 iCountMs)
{
struct timeval t_timeout = {0};
if (iCountMs < 1000)
{
t_timeout.tv_sec = 0;
t_timeout.tv_usec = iCountMs * 1000;
}
else
{
t_timeout.tv_sec = iCountMs / 1000;
t_timeout.tv_usec = (iCountMs % 1000) * 1000;
}
select(0, NULL, NULL, NULL, &t_timeout); // 调用select函数阻塞程序
}
程序运行结果
在Linux下使用“gcc-g -o Sleep Sleep.c”命令对程序进行编译,成功之后,执行“Sleep”命令,结果如下:
Begin time: 2015.04.3013:36:40
End time: 2015.04.30 13:36:50
可见,程序在“2015.04.30 13:36:40”和“2015.04.30 13:36:50”之间休眠了10秒。
-------------------------------
本人微信公众号:zhouzxi,请扫描以下二维码:
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献6条内容
所有评论(0)