我需要实现一个定时器,每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函数将保存这个进程。
我希望我说得通,希望有人能在我的问题上帮助我。
发布于 2016-03-17 00:47:28
如果调用成功,您可能希望尝试msgctl(msqid, IPC_STAT, struct msqid_ds *msgqdsbuf);,然后可以使用msgdsbuf->msg_qnum找到当前消息的数量。调用者需要读取权限,我认为您在这里可能有此权限。
https://stackoverflow.com/questions/36049275
复制相似问题