社区
资源
帖子详情
API 占CPU 资源问题
sunlau29
2007-11-29 10:03:41
最近开始学习Windows API 编程。写了一个很简单的API,就是在WinProc 里面用 WM_PAINT 在窗口上显示一副小图片,但是这个窗口一打开CPU占用率 就高达90%。请问各位API高手,应该怎么去改进? 如果可以,请告诉我直接的方法,不要叫我去翻《windows程序设计》。
...全文
159
15
打赏
收藏
API 占CPU 资源问题
最近开始学习Windows API 编程。写了一个很简单的API,就是在WinProc 里面用 WM_PAINT 在窗口上显示一副小图片,但是这个窗口一打开CPU占用率 就高达90%。请问各位API高手,应该怎么去改进? 如果可以,请告诉我直接的方法,不要叫我去翻《windows程序设计》。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunlau29
2007-12-04
打赏
举报
回复
谢谢你,12楼,但是我把你的程序直接建立一个新工程运行,报错了
Compiling...
main.cpp
E:\MyGames\ES1\main.cpp(47) : error C2065: 'brvbarCS_VREDRAW' : undeclared identifier
Error executing cl.exe.
ES1.exe - 1 error(s), 0 warning(s)
feng1976
2007-12-04
打赏
举报
回复
不客气
对给我发几分,哈哈
sunlau29
2007-12-04
打赏
举报
回复
谢谢9楼,你的方法最好,把我的绘图代码放到beiginPaint 和EndPain之间,资源问题就解决了,谢谢
ZiSheng
2007-12-02
打赏
举报
回复
to6,7楼;
不愿回答问题就请不要说没用的话
ZiSheng
2007-12-02
打赏
举报
回复
#include <stdlib.h>
#include <windows.h>
HBITMAP hBitmap;
extern HINSTANCE hInst;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow("MYBMPDIAG",
"BMPDIAG",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
800,
800, //标题栏高三十
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MYBMPDIAG";
wcex.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
return RegisterClassEx(&wcex);
}
HINSTANCE hInst;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
//HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,"BMP/u1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE |LR_CREATEDIBSECTION);
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HDC hdcmem;
RECT rect2;
GetClientRect(hWnd,&rect2);
static int nBmpX,nBmpY;
static HBITMAP hBitmap;
BITMAP bmp;
PAINTSTRUCT ps;
HINSTANCE hInstance;
int result;
switch (message)
{
case WM_CREATE:
hInstance=((LPCREATESTRUCT)lParam)->hInstance;
hBitmap=(HBITMAP)::LoadImage(hInstance,"BMP/19.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
result =GetObject(hBitmap,sizeof(bmp),&bmp);
nBmpX=bmp.bmWidth;
nBmpY=bmp.bmHeight;
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
hdcmem=CreateCompatibleDC(hdc);
SelectObject(hdcmem,hBitmap);
// mydc=GetDC(hWnd);
// RECT rect2;
// GetClientRect(hWnd,&rect2);
BitBlt(hdc,0,0,nBmpX,nBmpY,hdcmem,0,0,SRCCOPY);
DeleteDC(hdcmem);
// ReleaseDC(hWnd,mydc);
// ReleaseDC(hWnd,hdc);
EndPaint(hWnd,&ps);
return 0;
case WM_CLOSE:
DeleteObject(hBitmap);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
以上程序在我的机器上运行成功
ZiSheng
2007-12-02
打赏
举报
回复
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
这里是主要的问题所在
feng1976
2007-12-01
打赏
举报
回复
绘制部分要这样写
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
return 0L;
// Process other messages.
}
}
sunlau29
2007-12-01
打赏
举报
回复
如果要正确实现我需要的效果,那应该如何写?
feng1976
2007-11-30
打赏
举报
回复
^_^
只知其然,不知其所以然啊
jameshooo
2007-11-30
打赏
举报
回复
天哪,LoadImage会被调用无数次。
WM_PAINT消息处理过程比较乱。
DC用得不正确。
总之,问题不打一处来。
sunlau29
2007-11-30
打赏
举报
回复
#include <stdlib.h>
#include <windows.h>
extern HINSTANCE hInst;
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow("MYBMPDIAG",
"BMPDIAG",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
300,
200+30, //标题栏高三十
NULL,
NULL,
hInstance,
NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW| CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MYBMPDIAG";
wcex.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
return RegisterClassEx(&wcex);
}
HINSTANCE hInst;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HDC mydc;
RECT rect2;
GetClientRect(hWnd,&rect2);
int nBmpX;
int nBmpY;
HBITMAP hBitmap=(HBITMAP)::LoadImage(NULL,"BMP/U1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
BITMAP bmp;
switch (message)
{
case WM_COMMAND:
break;
case WM_PAINT:
{
GetObject(hBitmap,sizeof(bmp),&bmp);
nBmpX=bmp.bmWidth;
nBmpY=bmp.bmHeight;
hdc=CreateCompatibleDC(NULL);
SelectObject(hdc,hBitmap);
mydc=GetDC(hWnd);
StretchBlt(mydc,0,0,rect2.right,rect2.bottom,hdc,0,0,nBmpX,nBmpY,SRCCOPY);
ReleaseDC(hWnd,mydc);
break;
}
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
stivenjia
2007-11-30
打赏
举报
回复
你连个代码都不告诉我,我怎么能知道为什么能占如此多的资源
jameshooo
2007-11-30
打赏
举报
回复
贴代码上来看看
Pipi0714
2007-11-30
打赏
举报
回复
看不到代码如何改?
zaodt
2007-11-30
打赏
举报
回复
看不到,怎么改?
excel导出引发的
cpu
问题
问题
:线上导出订单记录有十几万条,发现每次导出
cpu
都会爆满。Apache POI 的 XSSF
API
导出大量数据。
STM32Hal库FreeRTOS统计
CPU
占
比工具:实时监测,优化系统性能
STM32Hal库FreeRTOS统计
CPU
占
比工具:实时监测,优化系统性能 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在嵌入式系统开发中,
CPU
资源
的高效利用至关重要。STM32Hal库FreeRTOS统计
CPU
占
比工具,正是为此而生。这个工具基于STM32F103系列微控制器和FreeRTOS实时操作系统,提供了一种高效的方法来监控各任务的
CPU
占
用情况,帮助...
解决kubernetes宿主机top
cpu
wa io过高引起的
cpu
资源
耗尽
问题
环境 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) sudo docker version Client: Version: 17.10.0-ce
API
version: 1.33 Go version: go1.8.3 Git commit: f4ffd25 Built: ...
如何用好
CPU
资源
?
应用程序运行于操作系统之上。现在操作系统,无论是Linux、Unix或Windows,分时复用是基本的
CPU
调度方式。本文仅就Linux操作系统,结合Achelous平台,探讨如何高效使用
CPU
资源
。
资源
cpu
s在物理上对应什么? Achelous平台上用户申请的
CPU
资源
都是逻辑
CPU
核,并不一定和任何物理
CPU
、核心或者超线程对应。如果没有打开核的超线程选项,物理
CPU
的每个核在操作系统中体现为一个逻辑
CPU
核。如果打开了超线程技术,每个核会有两个物理线程,每个线程在操作系统中就是一个逻辑
CPU
核
Kubernetes 给容器和Pod分配
CPU
资源
Kubernetes 给容器和Pod分配
CPU
资源
文章目录Kubernetes 给容器和Pod分配
CPU
资源
@[toc]Before you begin创建一个命名空间声明一个
CPU
申请和限制
CPU
单位请求的
CPU
超出了节点的能力范围如果不指定
CPU
限额呢设置
CPU
申请和限制的动机清理 这个教程指导如何给容器分配请求的
CPU
资源
和配置
CPU
资源
限制,我们保证容器可以拥有 所申请的
CPU
资源
,但是并不允许它使用超过限制的
CPU
资源
。 Before you begin You need to have a
资源
2,586
社区成员
18,437
社区内容
发帖
与我相关
我的任务
资源
VC/MFC 资源
复制链接
扫一扫
分享
社区描述
VC/MFC 资源
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章