gpt4 book ai didi

c - 实现看门狗定时器

转载 作者:行者123 更新时间:2023-11-30 15:10:40 26 4
gpt4 key购买 nike

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

这个问题可能看起来不清楚,但我需要的基础是一种实现看门狗计时器的方法,该计时器将每 35 秒检查一次条件。

我目前有这个代码:

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 函数将保留该过程。

我希望我说得有道理,并且有人能够帮助我解决我的问题。

最佳答案

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

关于c - 实现看门狗定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com