我有一组标签(63),每100毫秒更改一次。标签值存储在orderedTablePressure
数组中。在主循环中,我每100毫秒调用以下函数来更新标签值。但是当我在循环中迭代到63时,标签会在很短的时间内冻结(不会改变值),当我迭代到20时,冻结需要更多时间才能发生,但无论如何,当我迭代到10时,它需要几分钟冻结然后冻结(标签值不再更新)。
可能是什么问题呢?它可能是一个内存问题,我应该调用任何自由对象函数吗?
for (int j = 0; j < 20; j++) {
sprintf(window_text, "%d", orderedTablePressure[j]);
GetWindowRect(hWndLabel[j], &rect);
SetWindowTextA(hWndLabel[j], window_text);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
........
case WM_CTLCOLORSTATIC: {
DWORD CtrlID = GetDlgCtrlID((HWND)lParam);
int green = (255 * orderedTablePressure[CtrlID - 1000] / 4096);
assert(0 <= green <= 255);
green = (green - 128) * 2;
clrLabelBkGnd = RGB(255, green, 0);
hDC = reinterpret_cast<HDC>(wParam);
SetBkColor(hDC, clrLabelBkGnd);
return (INT_PTR)hBrushLabel[green];
}
break;
答案 0 :(得分:2)
如果您的应用程序正在运行,但没有任何内容被重新绘制,则很可能是您有资源泄漏,并且您已经用尽了10,000个句柄“津贴”。简单的检查是查看任务管理器, GDI对象列 - 您的流程10,000的值是多少?如果是 - 在绘画函数中查找已创建但未释放的GDI对象。或者在这里张贴 - 一起看。