浏览代码

使用线程代替SetTimer定时器,防止界面在连接服务端失败时卡顿;

Jeff 5 年之前
父节点
当前提交
6ed39ad39c
共有 1 个文件被更改,包括 56 次插入0 次删除
  1. 56 0
      SATHelper/SATHelper/DlgService.cpp

+ 56 - 0
SATHelper/SATHelper/DlgService.cpp

@@ -53,9 +53,65 @@ BOOL CDlgService::OnInitDialog()
 	// SetLayeredWindowAttributes(RGB(1, 2, 3), 0, LWA_COLORKEY/*|LWA_ALPHA*/);
 	InitCtrl();
 	FillData2Ctrl();
+#if 0
 	// 5秒刷新一次;
 	SetTimer(0, 5000, NULL);
 	SetTimer(1, 10000, NULL);
+#else
+	std::thread t([](CDlgService *p) {
+		while (true)
+		{
+			std::this_thread::sleep_for(std::chrono::milliseconds(1500));
+			{
+				CSATClient::GetInstance()->TCPQueryDevices(FALSE);
+				int nIndex = 0;
+				TCHAR szValue[MAX_PATH] = { 0 };
+				p->m_listDevices.DeleteAllItems();
+				for (std::vector<SATPROTO::Device>::iterator it = SATData::devices.begin(); it != SATData::devices.end(); it++) {
+					_itoa_s(nIndex, szValue, 10);
+					p->m_listDevices.InsertItem(nIndex, szValue);
+					if (it->nType == 0)
+						p->m_listDevices.SetItemText(nIndex, 1, "虚拟");
+					else if (it->nType == 1)
+						p->m_listDevices.SetItemText(nIndex, 1, "USB");
+					else if (it->nType == 2)
+						p->m_listDevices.SetItemText(nIndex, 1, "网络");
+					p->m_listDevices.SetItemText(nIndex, 2, it->szName);
+
+					if (it->nStatus == 0)
+						p->m_listDevices.SetItemText(nIndex, 3, "空闲");
+					else
+						p->m_listDevices.SetItemText(nIndex, 3, "繁忙");
+					nIndex++;
+				}
+			}
+			
+			std::this_thread::sleep_for(std::chrono::milliseconds(1500));
+			{
+				CSATClient::GetInstance()->TCPQueryTasks(FALSE);
+				int nIndex = 0;
+				p->m_listTask.DeleteAllItems();
+				TCHAR szValue[MAX_PATH] = { 0 };
+				for (int i = 0; i < SATData::task_resp.nSize; i++) {
+
+					// 任务No;
+					_itoa_s(SATData::task_resp.ssTasks[i].nTaskId, szValue, 10);
+					p->m_listTask.InsertItem(nIndex, szValue);
+					p->m_listTask.SetItemText(nIndex, 1, SATData::task_resp.ssTasks[i].szTaskNo);
+					p->m_listTask.SetItemText(nIndex, 2, SATData::task_resp.ssTasks[i].szTaskName);
+					if (SATData::task_resp.ssTasks[i].nStatus == 0)
+						p->m_listTask.SetItemText(nIndex, 3, "未执行");
+					else if (SATData::task_resp.ssTasks[i].nStatus == 1)
+						p->m_listTask.SetItemText(nIndex, 3, "执行中");
+					else if (SATData::task_resp.ssTasks[i].nStatus == 2)
+						p->m_listTask.SetItemText(nIndex, 3, "完成");
+					nIndex++;
+				}
+			}
+		}
+	},this);
+	t.detach();
+#endif
 	return TRUE;  // return TRUE unless you set the focus to a control
 				  // 异常: OCX 属性页应返回 FALSE
 }