随笔 - 733  文章 - 2  评论 - 12  阅读 - 92万

OpenThreads库学习

在看STM32资料中看到STM32WB系列“双核无线微控制器配备双核无线微控制器(MCU)配备Bluetooth® 5、OpenThreadZigBee®3.0连接技术,同时兼备超低功耗性能“不知道这个OpenThread是啥东东:

OpenThread库:提供了一个Thread类,供用户创建自己的线程。其使用非常方便,用户只需要继承自OpenThreads::Thread类,#include <OpenThreads/Thread>。然后自己重写run接口即可。参考https://blog.csdn.net/snail_hunan/article/details/69791641

https://www.threadgroup.org/cn

https://openthread.io/

https://www.st.com/zh/applications/connectivity/802-15-4-openthread.html

一 创建线程类重写run/cancle函数:

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyThread : public OpenThreads::Thread
{
public:
    MyThread(){}
    ~MyThread(){}
 
    virtual void run()
    {
       pass;
    }
    virtual int cancel()
    {
        pass;
    }
};

 二在主线程中创建新线程对象,并指明新线程对象以什么方式建立和创建它的主线程关系:join和detach到创建它的线程,如果使用join的方式,那么创建它的线程必须等待直到这个线程完成,如果是detach的方式,那么创建线程的线程和被创建的线程二者之间没有任何关系,被创建的线程相当于完全独立出来了。在OpenThread中默认使用的就是detach的模式 

复制代码
int main()
{
    MyThread thread1;
    thread.start();
   //  thread.join(); /*注释打开是join方式,否则是detach方式*/

    

   //主线程休眠一会,让hread1运行一会  
    OpenThreads::Thread ::microSleep(3000);  
    thread1.cancel();     //取消线程1运行
  
    //等待Thread1处理完善后工作,然后再让主线程往下运行
    while(Thread1.isRunning())
        OpenThreads::Thread::YieldCurrentThread();
  
     /*main thread task*/
    pass;
    return 0;    
}
View Code
复制代码

三 线程任务让出控制的方法:延时、主动让出  

    • static int YieldCurrentThread(); 挂起当前执行的线程

    • static int microSleep(unsigned int microsec); 使得当前线程进入睡眠

四 资源介绍:

4.1ReadWriteMutex:多读单写保护锁,读优先级高,写操作需要等所有的读操作线程完成才可写入。

4.2条件变量(Condition Variable)详解  :以互斥量为基础,进行线程的阻塞、同步信号等

  •        wait(Mutex *mutex)
  • wait(Mutex *mutex, unsigned long int ms)
  • signal 其它线程通过该函数操作某个信号量/互斥量等,让等待该资源的获得该资源
  • broadcast 其他线程通过调用这个函数来唤醒所有被阻塞的线程
posted on   杰瑞鼠  阅读(1157)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2018-07-31 Hart协议
2014-07-31 c++ 概述
2014-07-31 C语言-指针
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示