首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交错执行两个while循环

交错执行两个while循环
EN

Stack Overflow用户
提问于 2013-06-12 17:37:33
回答 4查看 825关注 0票数 1

我有两个传感器,我需要不断地监控它们。这两个传感器的内部工作原理不同,我需要经常检查这两个传感器,如下所示。

代码语言:javascript
复制
int sensorA(){
    while (true) {
    // read sensor A
    cout<<"sensorA \n";
  }
}
int sensorB(){
    while (true) {
    // read sensor B
    cout<<"sensorB \n";
  }
}

我的问题是,如何确保两个传感器以交错方式读取?如读取sensorA,然后读取SensorB,然后读取传感器A,等等。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-12 17:39:01

你需要在不同的线程中运行它们。

线程1将运行一个循环,而线程2将运行另一个循环。

看见

代码语言:javascript
复制
void thread1fun()
{
  while (true) {
    // read sensor A
    cout<<"sensorA \n";
  }
}

void thread2fun()
{
  while (true) {
    // read sensor B
    cout<<"sensorB \n";
  }
}

int main()
{
    std::thread t1(thread1fun); 
    std::thread t2(thread2fun); 
    t1.join();
    t2.join();
}

注意到正如评论中指出的,这只保证了两个while循环都会连续运行。在“正常”架构中,两个线程的平均运行速度大致相同。但是,如果要求传感器严格按照{s1,s2,s1,s2...}读取,那么这是不够的。在这种情况下,您将需要一个信令系统(事件和等待)来保证该顺序。如果您的传感器可以非常快速地读取,那么这可能是低效的。

票数 3
EN

Stack Overflow用户

发布于 2013-06-12 17:41:48

在同一个循环中读取这两个文件?

代码语言:javascript
复制
int sensorA();
int sensorB();
while(true){
    //read A
    count<<"sensor A \n";
    //read B
    coutn<<"sensor B \n";
}

如果您需要不断地读取它们,并且由于某些原因无法承受单个传感器读取之间的延迟,那么您需要为每个传感器创建一个线程。

票数 7
EN

Stack Overflow用户

发布于 2013-06-12 17:43:25

(嗯,所以我的评论作为回答:)

在同一个循环中,一个接一个地读它们。

代码语言:javascript
复制
while (1) {
    read(sensorA);
    read(sensorB);
}

类似上面的伪代码就可以解决这个问题。

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

https://stackoverflow.com/questions/17062210

复制
相关文章

相似问题

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