遗漏的部分
This commit is contained in:
1 parent
84fb370da8
commit
0493383ee8
63 files changed
+28237
-4
No files matched your search
@@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <thread>
|
||||
#include "fsm.h"
|
||||
#include "ThreadInterface.h"
|
||||
/*
|
||||
@qing:包含一个简易的多线程控制机制。
|
||||
需要共享内存的变量和函数声明为全局变量(通常需要带锁),
|
||||
线程中单独使用的变量和函数声明到属于它的命名空间中。
|
||||
每个线程的主函数包括了对其的流程控制代码。
|
||||
stop,setup,loop,clean函数中填入每个状态下的执行代码。
|
||||
其中需要用到的函数,又实现在后边。
|
||||
*/
|
||||
|
||||
namespace qing {
|
||||
namespace lci{
|
||||
//线程的主函数
|
||||
//-----------------------------------------------------------
|
||||
/*通常情况下,线程的主函数。*/
|
||||
|
||||
//前向声明脚本类型
|
||||
class CommonThread: public lci::Fsm, ThreadInterface {
|
||||
//一个持有资源线程的状态机类型
|
||||
public:
|
||||
//构造函数.
|
||||
//没有必要输入打印机、脚本、线程的名字,放到全局变量
|
||||
CommonThread(std::string name);
|
||||
//暂时删除复制构造函数
|
||||
CommonThread(CommonThread&) = delete;
|
||||
//如果把析构函数放在这里,将会导致纯虚函数错误
|
||||
virtual ~CommonThread();
|
||||
|
||||
//对线程名字的设置
|
||||
void SetLabel(std::string name);
|
||||
//对线程名字的获取
|
||||
std::string& GetLabel();
|
||||
//-----------------------------------------------------------
|
||||
//等待线程启动完毕
|
||||
//线程启动失败返回失败。线程启动成功或者现程结束返回成功。
|
||||
//
|
||||
//这个函数在某些情况下有可能会一直等待,直到循环结束
|
||||
bool WaitStart(unsigned long n);
|
||||
|
||||
void WaitClose();
|
||||
|
||||
virtual void StopEvent() override;
|
||||
virtual void WakeEvent() override;
|
||||
virtual void LoopEvent() override;
|
||||
virtual void ClearEvent() override;
|
||||
|
||||
void thread_main();
|
||||
|
||||
private:
|
||||
|
||||
//线程的名字
|
||||
std::string label;
|
||||
//用来存放该子线程的标识符。
|
||||
std::thread *thread = NULL;
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user