首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用C语言将数据定期从客户端发送到服务器

用C语言将数据定期从客户端发送到服务器
EN

Stack Overflow用户
提问于 2014-12-07 17:05:15
回答 1查看 1.6K关注 0票数 1

我正在创建一个多线程套接字程序,需要定期向服务器发送2组数据。客户端需要每3秒发送一次GPS信息,每4秒发送一次极性信息。实现它的想法是简单地创建一个新线程,创建一个无限循环,发送() GPS信息,休眠()1秒,发送()极性信息,然后睡眠()2秒。这样做是否足够呢?对不起,我刚开始使用套接字编程,所以我不知道其他的方法。

EN

回答 1

Stack Overflow用户

发布于 2014-12-07 17:32:38

你所建议的计划是:

发送GPS信息,睡眠1秒,发送极性信息,然后睡眠2秒。

在12秒的时间内,这将导致:

  1. 睡眠1
  2. 极性;睡眠1
  3. 睡眠1
  4. 睡眠1
  5. 极性;睡眠1
  6. 睡眠1
  7. 睡眠1
  8. 极性;睡眠1
  9. 睡眠1
  10. 睡眠1
  11. 极性;睡眠1
  12. 睡眠1

这将发送GPS信息4次(正确)和极性4次,每3秒发送一次,而不是按照规范要求每4秒发送3次。所需的顺序可能是:

  1. GPS;极性;睡眠1
  2. 睡眠1
  3. 睡眠1
  4. 睡眠1
  5. 极性;睡眠1
  6. 睡眠1
  7. 睡眠1
  8. 睡眠1
  9. 极性;睡眠1
  10. 睡眠1
  11. 睡眠1
  12. 睡眠1

请注意,在某一秒,GPS和极性都必须发送。

您可以通过两种方法中的任何一种来实现这一点。假设您需要使用线程,那么使用两个线程,一个在三秒等待,一个在4秒等待。协调对套接字的访问与互斥,以便在12秒的倍数,您仍然得到理智的行为。

但是,您可以通过一个等待适当间隔的单线程进程来完成这一切:

代码语言:javascript
运行
复制
int i_gps = 3;
int i_pol = 4;
int t_gps = 0;
int t_pol = 0;
int t_cur = 0;

while (1)
{
    if (t_cur == t_gps && t_cur == t_pol)
    {
        t_cur = t_gps = t_pol = 0;  // Avoid integer overflow
    }
    if (t_cur == t_gps)
    {
        send GPS
        t_gps += i_gps;
    }
    if (t_cur == t_pol)
    {
        send polarity
        t_pol += i_pol;
    }
    sleep 1;
    t_cur++;
}

您还可以通过更改循环末尾的代码来确定接下来哪个发送,然后休眠适当的时间,并将t_cur增量到适当的时间(而不是一直使用1秒),您也可以睡上几秒钟。

如果您需要避免漂移(因为上面的代码假设发送过程是瞬时的,而不是即时的),那么您必须使用亚秒睡眠,并在循环开始时捕获时间,并调整睡眠间隔以允许发送所需的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27345239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档