mfc获取进程运行时间

mfc获取进程运行时间,第1张

因为什么,因为在内核下的运行通常是进程轮询线程是否有任务,时间很短,而在用户下的运行时间通常是用户触发线程的运行,同样通常也是很快就完成,所以楼主这样求得的仅仅是进程实际运行时间,至于创建的时间可以这样求:一种情况是关闭了的,即exittime-starttime(抽象化语言,楼主应该能懂),一种情况是进程未关闭,楼主可获取当前时间再减去创建时间点即可。

设置定时器,添加ontimer函数,在添加windows消息处理那个地方添加ontimer函数,初始化里添加

SetTimer( 1, 1, NULL ); //为时间设置定时器1秒

最详细的:

void SetIsotropic (HDC hdc, int cxClient, int cyClient)

{

SetMapMode (hdc, MM_ISOTROPIC) ;

SetWindowExtEx (hdc, 1000, 1000, NULL) ;

SetViewportExtEx (hdc, cxClient / 2, -cyClient / 2, NULL) ;

SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;

}

void RotatePoint (POINT pt[], int iNum, int iAngle)

{

int i ;

POINT ptTemp ;

for (i = 0 ; i < iNum ; i++)

{

ptTempx = (int) (pt[i]x cos (TWOPI iAngle / 360) +

pt[i]y sin (TWOPI iAngle / 360)) ;

ptTempy = (int) (pt[i]y cos (TWOPI iAngle / 360) -

pt[i]x sin (TWOPI iAngle / 360)) ;

pt[i] = ptTemp ;

}

}

void DrawClock (HDC hdc)

{

int iAngle ;

POINT pt[3] ;

for (iAngle = 0 ; iAngle < 360 ; iAngle += 6)

{

pt[0]x = 0 ;

pt[0]y = 900 ;

RotatePoint (pt, 1, iAngle) ;

pt[2]x = pt[2]y = iAngle % 5 33 : 100 ;

pt[0]x -= pt[2]x / 2 ;

pt[0]y -= pt[2]y / 2 ;

pt[1]x = pt[0]x + pt[2]x ;

pt[1]y = pt[0]y + pt[2]y ;

SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;

Ellipse (hdc, pt[0]x, pt[0]y, pt[1]x, pt[1]y) ;

}

}

void DrawHands (HDC hdc, SYSTEMTIME pst, BOOL fChange)

{

static POINT pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150,

0, -200, 50, 0, 0, 800, -50, 0, 0, -200,

0, 0, 0, 0, 0, 0, 0, 0, 0, 800 } ;

int i, iAngle[3] ;

POINT ptTemp[3][5] ;

iAngle[0] = (pst->wHour 30) % 360 + pst->wMinute / 2 ;

iAngle[1] = pst->wMinute 6 ;

iAngle[2] = pst->wSecond 6 ;

memcpy (ptTemp, pt, sizeof (pt)) ;

for (i = fChange 0 : 2 ; i < 3 ; i++)

{

RotatePoint (ptTemp[i], 5, iAngle[i]) ;

Polyline (hdc, ptTemp[i], 5) ;

}

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

static int cxClient, cyClient ;

static SYSTEMTIME stPrevious ;

BOOL fChange ;

HDC hdc ;

PAINTSTRUCT ps ;

SYSTEMTIME st ;

switch (message)

{

case WM_CREATE :

SetTimer (hwnd, ID_TIMER, 1000, NULL) ;

GetLocalTime (&st) ;

stPrevious = st ;

return 0 ;

case WM_SIZE :

cxClient = LOWORD (lParam) ;

cyClient = HIWORD (lParam) ;

return 0 ;

case WM_TIMER :

GetLocalTime (&st) ;

fChange = stwHour != stPreviouswHour ||

stwMinute != stPreviouswMinute ;

hdc = GetDC (hwnd) ;

SetIsotropic (hdc, cxClient, cyClient) ;

SelectObject (hdc, GetStockObject (WHITE_PEN)) ;

DrawHands (hdc, &stPrevious, fChange) ;

SelectObject (hdc, GetStockObject (BLACK_PEN)) ;

DrawHands (hdc, &st, TRUE) ;

ReleaseDC (hwnd, hdc) ;

stPrevious = st ;

return 0 ;

case WM_PAINT :

hdc = BeginPaint (hwnd, &ps) ;

SetIsotropic (hdc, cxClient, cyClient) ;

DrawClock (hdc) ;

DrawHands (hdc, &stPrevious, TRUE) ;

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_DESTROY :

KillTimer (hwnd, ID_TIMER) ;

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

这个其实还蛮容易的,你可以在OnInitialDialog里面加入时钟的界面代码(包括画一个时钟和三个表针),然后设置一个定时器,定时器周期设置成一秒,然后在定时器函数里面让时钟走动就可以了

如果在MFC中

使用

SetTimer(1,1000,NULL);//1000表示1秒为周期

响应WM_TIMER消息

void MyDlg::OnTimer(UINT nIDEvent)

{

//获取当前时间

CTime time = CTime::GetCurrentTime();

//m_Time为控件变量。为控件设置时间。

m_TimeSetWindowText(timeFormat("%H:%M:%S"));

CDialog::OnTimer(nIDEvent);

}

如果用win32 API写。

在消息WM_CREATE里

SetTimer (hwnd, ID_TIMER, 1000, NULL);

消息WM_TIMER里

InvalidateRect(hwnd, NULL, FALSE);

以上就是关于mfc获取进程运行时间全部的内容,包括:mfc获取进程运行时间、MFC中制作时钟的问题、求: 用mfc编一个模拟时钟程序。。急!!高手们帮忙~~等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9760780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存