我需要实现一个每 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 函数将保存该过程。
我希望我说得通,并且有人能够帮助我解决我的问题。