如何将多个参数传递给生成的线程(Mbed)?
How to pass multiple arguments to spawned threads (Mbed)?
我使用 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();
}
但是只有一个参数可以传递。
有没有方便的方法来传递多个参数?我不喜欢将它们放入结构并传递结构的想法。但我看不到任何其他方法。
您可以使用 std::tuple<>
而不是定义新的 struct
。这在大多数情况下更简单,尽管随着参数成员数量的增加,您可能会发现自己毕竟想要一个结构来为它们获取名称,而不必 std::get()
按类型或索引。
不太可能有任何其他方式,因为此类回调系统通常只提供一个 'user data' 指针,我对 Mbed 的简短谷歌搜索表明它是相同的。
我使用 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();
}
但是只有一个参数可以传递。
有没有方便的方法来传递多个参数?我不喜欢将它们放入结构并传递结构的想法。但我看不到任何其他方法。
您可以使用 std::tuple<>
而不是定义新的 struct
。这在大多数情况下更简单,尽管随着参数成员数量的增加,您可能会发现自己毕竟想要一个结构来为它们获取名称,而不必 std::get()
按类型或索引。
不太可能有任何其他方式,因为此类回调系统通常只提供一个 'user data' 指针,我对 Mbed 的简短谷歌搜索表明它是相同的。