如何在Wait()C ++期间同时调用另一个函数

问题描述 投票:0回答:1

我有一个课程,我有两个功能如下;

// Function to calculate the sum and average temperature
float read_samples(float *data, int num_samples)
{
    float sum = 0.0;
    float average = 0.0;

    for(int i = 1; i < num_samples; i++ ) {
        data[i] = temperature.read();
        sum = sum + data[i];
        wait(1);
    }
    average = sum / (num_samples - 1);
    return average;
}

// Main Function that is called on running the application
int main()
{
    int num_samples = 12 / 1;
    float data[num_samples];
    //sw.fall(read_samples(data, num_samples));
    while(1) {
        wait(12);
        float result = read_samples(data, num_samples);
        lcd.printf("%.2f\n", result);
        //data[0];
    }
}

当我打电话给“等待(12);”在Main中的方法,我希望代码同时在等待时执行“read_samples”方法,并且当“read_samples”完成时返回计算的值,然后继续在Main函数中显示计算结果。计算应该在12秒内等待。

但是,现在发生的事情是在等待的12秒内没有执行任何执行,因此在等待12秒之后它会调用“read_samples”方法并执行另外11秒。因此,显示下一个结果所花费的总时间是(12 + 11)23秒。请问,在12秒等待期间,如何编写代码来执行“read_samples”方法?

c++ wait iot mbed
1个回答
0
投票

您可以在单独的线程中运行read_samples。例如。:

static float average = 0.0f;

// Function to calculate the sum and average temperature
void read_samples()
{
    int num_samples = 12 / 1;
    float data[num_samples];

    float sum = 0.0;

    for(int i = 1; i < num_samples; i++ ) {
        data[i] = temperature.read();
        sum = sum + data[i];
        wait(1);
    }
    average = sum / (num_samples - 1);
}

// Main Function that is called on running the application
int main()
{
    //sw.fall(read_samples(data, num_samples));
    while(1) {
        Thread sampleThread;
        sampleThread.start(&read_samples);

        wait(12);

        lcd.printf("%.2f\n", result);
        //data[0];
    }
}

你想要通过average保护访问Mutex

© www.soinside.com 2019 - 2024. All rights reserved.