85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
#pragma execution_character_set("utf-8")
|
||
#include "LogWindowUIFunction.h"
|
||
#include <mutex>
|
||
|
||
#define BIND(func) std::bind(&LogWindowUIFunction::func, this, std::placeholders::_1)
|
||
|
||
std::mutex logMutex; // 用于保护日志输出
|
||
|
||
// 构造函数:启动子线程
|
||
LogWindowUIFunction::LogWindowUIFunction()
|
||
: m_running(true)
|
||
{
|
||
ccsMessageHandle::instance()->register_callback(BIND(out_log), CMD_log_window_out_log);
|
||
connect(this, &LogWindowUIFunction::logMessageReceived, this, &LogWindowUIFunction::onLogMessageReceived);
|
||
m_logThread = std::thread(&LogWindowUIFunction::logFunction, this);
|
||
}
|
||
|
||
|
||
|
||
// 析构函数:等待子线程结束
|
||
LogWindowUIFunction::~LogWindowUIFunction()
|
||
{
|
||
ccsMessageHandle::instance()->unregister_callback(CMD_log_window_out_log);
|
||
stopThread();
|
||
if (m_logThread.joinable())
|
||
{
|
||
m_logThread.join(); // 等待子线程完成
|
||
}
|
||
}
|
||
|
||
|
||
void LogWindowUIFunction::out_log(const QString message)
|
||
{
|
||
|
||
}
|
||
// `from` 和 `to` 函数可以按需实现,假设是 JSON 数据的处理
|
||
void LogWindowUIFunction::from(const json& j)
|
||
{
|
||
}
|
||
|
||
void LogWindowUIFunction::to(json j)
|
||
{
|
||
|
||
}
|
||
|
||
// 子线程的工作函数:模拟日志输出
|
||
void LogWindowUIFunction::logFunction()
|
||
{
|
||
while (m_running)
|
||
{
|
||
QString strLog = "Simulated log message"; // 示例日志内容
|
||
StabilityModel * pModle = StabilityModel::getStabilityModelpPtr();
|
||
if(!pModle)
|
||
{
|
||
continue;
|
||
}
|
||
bool bRet = pModle->showWindowsLog(strLog);
|
||
if (bRet)
|
||
{
|
||
QtToWebFunction::getInstance().qt2web(CMD_log_window_out_log, EXECUTE_SUCCESS, strLog);
|
||
//emit logMessageReceived(strLog); // 发射信号
|
||
}
|
||
std::this_thread::sleep_for(std::chrono::milliseconds(50)); // 添加延时,避免占用过多资源
|
||
}
|
||
}
|
||
|
||
// 停止子线程的函数:设置标志并通知线程退出
|
||
void LogWindowUIFunction::stopThread()
|
||
{
|
||
m_running = false;
|
||
}
|
||
|
||
// 处理日志信息的槽函数
|
||
void LogWindowUIFunction::onLogMessageReceived(const QString message)
|
||
{
|
||
// 假设这里是 UI 中显示日志的代码,可能使用 QTextBrowser 等控件
|
||
std::lock_guard<std::mutex> lock(logMutex); // 使用互斥锁保护 UI 操作
|
||
// 更新日志窗口的内容
|
||
//QString jsonMsg = ccsMessageHandle::instance()->createMsg(CMD_log_window_out_log, EXECUTE_SUCCESS, message);
|
||
//ccsMessageHandle::instance()->qt2web(CMD_log_window_out_log, jsonMsg);
|
||
|
||
int a = 0;
|
||
// 可以在这里更新 UI(例如通过信号连接)
|
||
}
|