使用sleep()或无限循环来等待事件会更好吗?

时间:2017-08-28 07:34:20

标签: c sleep libssh

我目前正在与一个与SSH服务器通信的客户端上工作。 一切都运行良好,但是,因为服务器回答很慢,我不得不等待它发送数据。 我有两个选择,我想就什么是等待服务器的最有效方式提出建议。

选择#1:

while (!(ssh_channel_poll(*sshChannel,0)))
 ;

选择#2:

while (!(ssh_channel_poll(*sshChannel,0)))
  sleep(1);

4 个答案:

答案 0 :(得分:8)

两种选择都是不可取的。通常,您将使用阻止读取。我认为它看起来像这样(因为你说你在等待服务器):

while (!ssh_channel_poll(...)) { ... }
ssh_channel_read(...);

在这种情况下,poll是不必要的。只需确保SSH连接是阻止连接,read函数将等待,直到数据可用时,如果没有可用的话。

// This is all you need.
ssh_channel_read(...);

答案 1 :(得分:1)

您可能想要拨打poll(2)系统电话(或旧的select(2))。然后,您需要获取相关的文件描述符。或使用ssh_channel_poll_timeout功能或ssh_channel_select

同时查看libssh poll functions

答案 2 :(得分:1)

我认为使用sleep而不是无限循环,因为使用无限循环,会浪费CPU功率和时间。使用sleep时,CPU将能够运行其他程序。

答案 3 :(得分:0)

剪辑不是一个好主意。 有了睡眠(...),你几乎不会使用你的cpu,就像使用空时(...)一样。