OpenThreads库学习
在看STM32资料中看到STM32WB系列“双核无线微控制器配备双核无线微控制器(MCU)配备Bluetooth® 5、OpenThread和ZigBee®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; }
三 线程任务让出控制的方法:延时、主动让出
-
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 其他线程通过调用这个函数来唤醒所有被阻塞的线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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语言-指针