Files
blackbird/core/include/main/Tttask.hh
T
2026-07-20 11:12:29 +08:00

59 lines
1.3 KiB
C++

#pragma onces
#include "tt/Mq.h"
namespace qing {
/*
* TRANSMIT TASK 通信任务
* (创建一个通信伺服器,它收到消息就执行回调)
* (长时间伺服运行会不会有问题)
*/
class Tttask: public ITask {
public:
/* 构造【通信任务】
* msglen: 单条消息的长度
* msgcnt: 消息伺服长度
* callback: 回调函数 */
Tttask(const size_t msglen, size_t msgcnt, const sf_t callback);
/* 启动该通信伺服任务 */
void start() override;
/* 终止这个通信伺服任务
*
* TODO: 研究一下要不要释放一些资源
* TODO: 增加超时 */
void stop() override {
if (this->isRunning())
th->WaitClose();
}
/* 该任务是否在运行
*
* FIXME: 对START状态的处理还应该考虑
* FIXME: 如果在STOP状态而没有stop()任务,可能会造成线程未关闭,一直占用资源? */
bool isRunning() override;
private:
std::unique_ptr<Thread> th; /* 可控线程指针 */
std::unique_ptr<sf_t> callback; /* 回调行为(接收之后)指针 */
std::unique_ptr<Mq> mq; /* 消息队列指针 */
size_t msglen=0, msgcnt=0; /* 消息的缓存规格 */
std::string name; /* 消息队列名(进程号) */
/* 初始化通信伺服线程,
* 初始化方法就是通过传入一些函数,
* 构建线程 */
void init_thread();
};
}