Как передать несколько аргументов в порожденные потоки (Mbed)? - PullRequest
0 голосов
/ 06 августа 2020

Я использую Mbed RTOS, и мне нужно передать несколько аргументов многопоточной функции.

В документации API есть пример:

#include "mbed.h"

Thread thread;
DigitalOut led1(LED1);
volatile bool running = true;

// Blink function toggles the led in a long running loop
void blink(DigitalOut *led) {
    while (running) {
        *led = !*led;
        wait(1);
    }
}

// Spawns a thread to run blink for 5 seconds
int main() {
    thread.start(callback(blink, &led1));
    wait(5);
    running = false;
    thread.join();
}

Но нужно передать только один аргумент .

Есть ли удобный способ передать несколько аргументов? Мне не нравится идея поместить их в структуру и передать структуру. Но я не вижу другого способа сделать это.

1 Ответ

2 голосов
/ 06 августа 2020

Вы можете использовать std::tuple<> вместо определения нового struct. В большинстве случаев это проще, хотя по мере увеличения числа членов аргумента вам может понадобиться структура, чтобы получить для них имена, вместо того, чтобы std::get() по типу или индексу.

Маловероятно, что будет какой-либо другой способ, поскольку такие системы обратного вызова обычно предлагают только один указатель «пользовательских данных», и мой краткий поиск в Google по Mbed предполагает, что это то же самое.

...