首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现WatchDog定时器

实现WatchDog定时器
EN

Stack Overflow用户
提问于 2016-03-17 00:01:28
回答 1查看 1.8K关注 0票数 0

我需要实现一个定时器,每35秒检查一次条件。我的程序使用IPC方案在客户端和服务器进程之间来回通信信息。问题是,我在循环中运行msgrcv()函数,它暂停循环直到找到消息,这是不好的,因为我需要计时器始终检查客户端是否停止发送消息。(如果它只在收到消息时进行检查,这将是无用的.)

问题似乎不清楚,但我所需要的基本方法是实现一个看门狗计时器,每35秒检查一次情况。

我现在有这样的代码:

代码语言:javascript
复制
time_t start = time(NULL);

//Enter main processing loop
while(running)
{
    size_t size = sizeof(StatusMessage) - sizeof(long);

    if(msgrcv(messageID, &statusMessage, size, 0, 0) != -1)
    {
        printf("(SERVER) Message Data (ID #%ld)  =  %d  :  %s\n", statusMessage.machineID, statusMessage.status_code, statusMessage.status);

        masterList->msgQueueID = messageID;
        int numDCs = ++masterList->numberOfDCs;

        masterList->dc[numDCs].dcProcessID = (pid_t) statusMessage.machineID;
        masterList->dc[numDCs].lastTimeHeardFrom = 1000;

        printf("%d\n", masterList->numberOfDCs);
    }

    printf("%.2f\n", (double) (time(NULL) - start));
}

唯一的问题是,正如我前面所说的,如果没有消息要输入,检查时间过去了多少时间的代码就无法到达,因为msgrcv函数将保存这个进程。

我希望我说得通,希望有人能在我的问题上帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 00:47:28

如果调用成功,您可能希望尝试msgctl(msqid, IPC_STAT, struct msqid_ds *msgqdsbuf);,然后可以使用msgdsbuf->msg_qnum找到当前消息的数量。调用者需要读取权限,我认为您在这里可能有此权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36049275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档