COMPASSi/trunk/code/inc/Application/QtToWebFunction.h

111 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-06-25 15:06:42 +08:00
#ifndef QtToWebFunction_H
#define QtToWebFunction_H
#include <QString>
#include <QMap>
#include <QObject>
#include <thread>
#include <atomic>
#include <deque>
#include <deque>
#include <mutex>
#include "MessageHandle.h"
struct QtToWebData
{
QtToWebData()
{
cmd = 0;
iState = 0;
message = "";
data = "";
}
int cmd;
int iState;
QString message;
QString data;
};
class QtToWebThread
{
public:
QtToWebThread();
~QtToWebThread();
void threadFunction();
private:
std::atomic<bool> m_running; // 控制线程是否继续运行的标志
std::thread m_Thread; // 子线程
};
class QtToWebFunction
{
public:
// 获取单例实例的公共静态方法
static QtToWebFunction& getInstance();
void qt2web(QtToWebData& data)
{
std::lock_guard<std::mutex> lock(m_mutex); // 保护共享资源
m_data.emplace_back(data);
}
void qt2web(int cmd,
int iState,
QString message = "",
QString data = "")
{
std::lock_guard<std::mutex> lock(m_mutex); // 保护共享资源
QtToWebData d;
d.cmd = cmd;
d.iState = iState;
d.message = message;
d.data = data;
m_data.emplace_back(d);
}
// 从队列头部取出数据
bool dequeue(QtToWebData& result) {
std::lock_guard<std::mutex> lock(m_mutex); // 保护共享资源
if (!m_data.empty()) {
result = m_data.front();
m_data.pop_front();
return true;
}
return false;
}
// 查看队列大小
size_t size() {
std::lock_guard<std::mutex> lock(m_mutex); // 保护共享资源
return m_data.size();
}
// 检查队列是否为空
bool empty() {
std::lock_guard<std::mutex> lock(m_mutex); // 保护共享资源
return m_data.empty();
}
private:
QtToWebFunction();
~QtToWebFunction();
std::deque<QtToWebData> m_data; // 使用 deque 存储数据
std::mutex m_mutex; // 互斥锁,确保线程安全
};
#endif // LogWindowUIFunction_H