16,471
社区成员
发帖
与我相关
我的任务
分享
__int64 CompareFileTime(FILETIME time1, FILETIME time2)//转换为整数时间
{
__int64 a = time1.dwHighDateTime << 32 | time1.dwLowDateTime;
__int64 b = time2.dwHighDateTime << 32 | time2.dwLowDateTime;
return (b - a);
}
void Cmfc_cpuDlg::OnBnClickedButton1()
{
HANDLE hEvent;
BOOL res;
FILETIME preidleTime;
FILETIME prekernelTime;
FILETIME preuserTime;
FILETIME idleTime;
FILETIME kernelTime;
FILETIME userTime;
res = GetSystemTimes(&idleTime, &kernelTime, &userTime);
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime;
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);// 初始值为 nonsignaled ,并且每次触发后自动设置为nonsignaled
while ( true){
Sleep(500);
//WaitForSingleObject(hEvent, 1000); //等待500毫秒
res = GetSystemTimes(&idleTime, &kernelTime, &userTime);
int idle = CompareFileTime(preidleTime, idleTime);
int kernel = CompareFileTime(prekernelTime, kernelTime);
int user = CompareFileTime(preuserTime, userTime);
float cpu = (kernel + user - idle) *100.0 / (kernel + user);
float cpuidle = (idle)*100.0 / (kernel + user);
CString szcpu;
szcpu.Format(_T("%lf"), cpu);
GetDlgItem(IDC_EDIT1)->SetWindowTextW(szcpu);
preidleTime = idleTime;
prekernelTime = kernelTime;
preuserTime = userTime;
}
}
MSG msg ;
while(TRUE)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
break;
}
DispatchMessage(&msg);
}
}
主线程 DispatchMessage ---> void Cmfc_cpuDlg::OnBnClickedButton1()的时候里面用到了while,一直不返回,界面线程就卡住了,界面线程还怎么处理其他消息,不能处理其他消息,界面不就卡住了?