mbed的Thread创建方式有多少种?
本帖最后由 adlu 于 2016-12-1 09:34 编辑我看到mbed的例程中,创建一个Thread有很多种方式。但不知道他们是怎么来的,有什么区别?
PS:本人C++比较薄弱。
比如有以下几种形式:
Thread thread(print_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
Thread thread(print_thread);
Thread t2(test_thread, (void *)"Th 2");
在编译的时候通过了,但是都出现了类似的警告。
Warning: Function "rtos::Thread::Thread(void (*)(const void *), void *, osPriority, std::uint32_t, unsigned char *)" (declared at <a href="#">mbed-rtos/rtos/Thread.h:189</a>) was declared "deprecated" in "main.cpp", Line: 20, Col: 16
求高人指点!
本帖最后由 adlu 于 2016-12-1 09:33 编辑
adlu 发表于 2016-12-1 09:08
下面是mbed的一个例程,编译的时候,第23行有一个警告。
我应该怎么改创建例程的代码,才是mbed OS 5的创 ...
尝试了几次,终于摸索出来。
对于带参数的可以这样:void print_thread(void const *argument)
{
while (true) {
Thread::wait(1000);
print_char();
}
}
Thread thread;
int main()
{
printf("\n\n*** RTOS basic example ***\n");
thread.start(callback(print_thread,(void *)NULL));//如果要传入参数,NULL可换成相应参数的指针
while (true) {
led1 = !led1;
Thread::wait(500);
}
}对于不带参数的,则可以这样:
void print_thread(void)
{
while (true) {
Thread::wait(1000);
print_char();
}
}
Thread thread;
int main()
{
printf("\n\n*** RTOS basic example ***\n");
thread.start(print_thread);
while (true) {
led1 = !led1;
Thread::wait(500);
}
}
根据c++猜测,rtos/rtos/Thread.h里有这个函数的定义,但是这个函数或者关键字 以后可能会被弃用吧,最好可以查看一下头文件有没有新的api:lol mbed好像在调整,Mbed5和以前有很多区别了。 Mbed 5.1 以后,使用thread.start(callback(task, argument)) 代替过时的构造函数产生线程。 党国特派员 发表于 2016-11-30 20:50
Mbed 5.1 以后,使用thread.start(callback(task, argument)) 代替过时的构造函数产生线程。 ...
下面是mbed的一个例程,编译的时候,第23行有一个警告。
我应该怎么改创建例程的代码,才是mbed OS 5的创建方式?
#include "mbed.h"
#include "rtos.h"
void print_char(char c = '*')
{
printf("%c", c);
fflush(stdout);
}
DigitalOut led1(LED1);
void print_thread(void const *argument)
{
while (true) {
Thread::wait(1000);
print_char();
}
}
int main()
{
printf("\n\n*** RTOS basic example ***\n");
Thread thread(print_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
while (true) {
led1 = !led1;
Thread::wait(500);
}
}
页:
[1]