111 lines
2.1 KiB
C++
111 lines
2.1 KiB
C++
#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
|