1

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

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

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

4

4 回答 4

7

在同一个循环中阅读两者?

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

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

于 2013-06-12T09:41:48.283 回答
6

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

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

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

像上面的伪代码这样的东西就可以了。

于 2013-06-12T09:43:25.430 回答
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....} 读取传感器,那么这还不够。在这种情况下,您将需要一个信号系统(事件和等待)来保证该顺序。如果您的传感器可以非常快速地读取,那可能效率低下。

于 2013-06-12T09:39:00.673 回答
1

If reading from your sensors is an asynchron operation you may be interested in this example from Boost.Coroutine.

于 2013-06-12T10:15:00.780 回答