From efb68b113b14ebfecd2a6045c13c8b838cca1e89 Mon Sep 17 00:00:00 2001 From: Wang Cong Date: Wed, 6 Mar 2024 15:01:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=9B=91=E8=A7=86=E5=99=A8=E4=B8=AD=E5=BC=BA=E5=88=B6=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E9=98=B2=E6=9D=80=E8=BF=9B=E7=A8=8B=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=BC=B9=E5=87=BA=E5=A4=9A=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E7=AA=97=E5=8F=A3=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Description: 修复系统监视器中强制结束防杀进程失败后,弹出多次提示窗口的问题 Log: 修修复系统监视器中强制结束防杀进程失败后,弹出多次提示窗口的问题 Bug: https://pms.uniontech.com/bug-view-245061.html --- deepin-system-monitor-main/gui/process_table_view.cpp | 10 +++++++++- deepin-system-monitor-main/process/process_db.cpp | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/deepin-system-monitor-main/gui/process_table_view.cpp b/deepin-system-monitor-main/gui/process_table_view.cpp index 959fa0e8..581a9bf2 100644 --- a/deepin-system-monitor-main/gui/process_table_view.cpp +++ b/deepin-system-monitor-main/gui/process_table_view.cpp @@ -54,6 +54,10 @@ using namespace common::init; const QByteArray header_version = "_1.0.0"; static const char *kSettingsOption_ProcessTableHeaderState = "process_table_header_state"; static const char *kSettingsOption_ProcessTableHeaderStateOfUserMode = "process_table_header_state_user"; +/** + * @brief m_pControlConnection 单例对象的信号连接之后,需要保持只连接一次,避免多次触发信号槽 + */ +static QMetaObject::Connection m_pControlConnection = QMetaObject::Connection(); ProcessTableView::ProcessTableView(DWidget *parent, QString userName) : BaseTableView(parent) , m_useModeName(userName) @@ -878,11 +882,15 @@ void ProcessTableView::initConnections(bool settingsLoaded) ErrorDialog::show(this, ec.getErrorName(), ec.getErrorMessage()); } }); + qInfo() << "'processControlResultReady' signal is connect?" << m_pControlConnection; + //The singleton object only needs to connect to the signal slot once. //show error dialog if sending signals to process failed - connect(ProcessDB::instance(), &ProcessDB::processControlResultReady, this, + if(!m_pControlConnection) + m_pControlConnection = connect(ProcessDB::instance(), &ProcessDB::processControlResultReady, this, [ = ](const ErrorContext & ec) { if (ec) { ErrorDialog::show(this, ec.getErrorName(), ec.getErrorMessage()); + qWarning() << "ErrorName: " << ec.getErrorName() << ",ErrorMessage: " << ec.getErrorMessage(); } }); } diff --git a/deepin-system-monitor-main/process/process_db.cpp b/deepin-system-monitor-main/process/process_db.cpp index 15815db7..a2cfbb77 100644 --- a/deepin-system-monitor-main/process/process_db.cpp +++ b/deepin-system-monitor-main/process/process_db.cpp @@ -290,6 +290,7 @@ void ProcessDB::sendSignalToProcess(pid_t pid, int signal) errno, QApplication::translate("Process.Signal", "Failed in sending signal to process"), pid, SIGCONT, ec); + qWarning() << "Failed in sending signal to process! process id:" << pid; Q_EMIT processControlResultReady(ec); return; }