如何在没有 while 循环的情况下使用 nanomsg 调查架构?

Posted

技术标签:

【中文标题】如何在没有 while 循环的情况下使用 nanomsg 调查架构?【英文标题】:How to use nanomsg survey architecture without while loop? 【发布时间】:2015-10-27 09:01:59 【问题描述】:

我正在经历 nanomsgIPC 的使用,并想使用 SURVEY-here 描述的原型架构.在这种情况下,进程作为客户端和服务器运行并交换数据。现在服务器有以下代码(也在提供的链接中列出):

int server (const char *url)

  int sock = nn_socket (AF_SP, NN_SURVEYOR);
  assert (sock >= 0);
  assert (nn_bind (sock, url) >= 0);
  sleep(1);                                              // wait for connections
  int sz_d = strlen(DATE) + 1;                           // '\0' too
  printf ("SERVER: SENDING DATE SURVEY REQUEST\n");
  int bytes = nn_send (sock, DATE, sz_d, 0);
  assert (bytes == sz_d);
  while (1)
    
      char *buf = NULL;
      int bytes = nn_recv (sock, &buf, NN_MSG, 0);
      if (bytes == ETIMEDOUT) break;
      if (bytes >= 0)
      
        printf ("SERVER: RECEIVED \"%s\" SURVEY RESPONSE\n", buf);
        nn_freemsg (buf);
      
    
  return nn_shutdown (sock, 0);

由于套接字类型为NN_SURVEYORwhile 循环不会在nn_recv 处等待。对于客户端,套接字类型为NN_RESPONDENT,因此,客户端中的while循环等待nn_recv

现在,由于这个 while 循环连续无限运行,CPU 使用率飙升至 99%。你能告诉我有没有其他方法可以使用nanomsg 制作调查架构。

【问题讨论】:

【参考方案1】:

如果没有收到任何内容,请尝试在循环结束时添加 yield() 调用。

【讨论】:

以上是关于如何在没有 while 循环的情况下使用 nanomsg 调查架构?的主要内容,如果未能解决你的问题,请参考以下文章

在不使用while循环的情况下找到最里面的异常?

我需要有关如何在它位于 do-while 循环内的情况下创建循环的帮助

如何在不使用while循环的情况下获取xml内容

在不使用while循环的情况下找到最内部的异常?

有没有不使用嵌套while循环来实现这个程序的不同方法? [复制]

在 LabVIEW 的每种情况下,如何在 while 循环中更改滑块值?