交错执行两个while循环

时间:2013-06-12 09:37:33

标签: c++ while-loop pthreads

我有两个传感器,我需要不断监测。两个传感器的内部工作是不同的,我需要不断检查,如下所示。

int sensorA(){
    while (true) {
    // read sensor A
    cout<<"sensorA \n";
  }
}
int sensorB(){
    while (true) {
    // read sensor B
    cout<<"sensorB \n";
  }
}

我的问题是如何确保以交错方式读取两个传感器?就像读传感器A然后传感器B然后传感器A等

4 个答案:

答案 0 :(得分:7)

在同一个循环中读取两个?

int sensorA();
int sensorB();
while(true){
    //read A
    count<<"sensor A \n";
    //read B
    coutn<<"sensor B \n";
}

如果您需要经常读取,并且由于某种原因,不能在单个传感器上读取之间的延迟,那么您将需要为每个传感器创建一个线程。

答案 1 :(得分:6)

(尤,所以我的评论作为答案:)

只需在同一循环中一个接一个地阅读它们。

while (1) {
    read(sensorA);
    read(sensorB);
}

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

答案 2 :(得分:3)

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

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

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 :(得分:1)

如果您的传感器读取是异步操作,您可能会对Boost.Coroutine的this example感兴趣。