adlu 发表于 2016-11-30 17:55:03

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:32:32

本帖最后由 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);
    }
}

霹雳之火 发表于 2016-11-30 19:29:57

根据c++猜测,rtos/rtos/Thread.h里有这个函数的定义,但是这个函数或者关键字 以后可能会被弃用吧,最好可以查看一下头文件有没有新的api:lol

shaoziyang 发表于 2016-11-30 20:44:25

mbed好像在调整,Mbed5和以前有很多区别了。

党国特派员 发表于 2016-11-30 20:50:18

Mbed 5.1 以后,使用thread.start(callback(task, argument)) 代替过时的构造函数产生线程。

adlu 发表于 2016-12-1 09:08:25

党国特派员 发表于 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]
查看完整版本: mbed的Thread创建方式有多少种?