我创建这个库是因为我需要三个线程,而且我需要其中两个线程在精确的时间运行,而不管其他线程在做什么。第一个线程处理串行通信。第二个是使用 Eigen 库使用浮点矩阵乘法运行卡尔曼滤波器。第三个是快速电流控制回路线程,它必须能够中断矩阵计算。
什么时候应该使用这个库:
有关更深入的详细信息,请参阅自述文件。
每个循环线程都有一个优先级和一个周期。如果优先级高于当前执行线程的线程到达其下一次执行时间,调度程序将暂停当前线程并切换到更高优先级的线程。一旦高优先级线程完成其执行,调度程序就会切换回前一个线程。
ThreadHandler库的调度方案如下:
1) 最高优先级优先。
2)如果优先级相同,则截止日期最早的线程最先执行。
3) 如果两个线程的截止时间相同,则第一个创建的线程将首先执行。
4) 一个线程只能被优先级更高的线程中断。
5) 一旦线程正在执行,它将阻塞所有优先级较低的线程的执行,直到运行函数返回。
6) 与 ThreadHandler 线程相比,循环函数的优先级为 -128。
可以通过 C++ 继承创建线程
class MyThread : public Thread
{
public:
MyThread() : Thread(priority, period, offset){}
virtual ~MyThread(){}
virtual void run()
{
//code to run
}
};
或者通过 createThread 和 lambda 函数
Thread* myThread = createThread(priority, period, offset,
[]()
{
//code to run
});
Thread 对象在创建时会自动连接到 ThreadHandler。
要开始执行创建的线程对象调用:
ThreadHandler::getInstance()->enableThreadExecution();
要毫无问题地使用这个库,您应该了解 C++ 并具有一些关于多线程编程和线程安全的知识。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !