WinAPI BitBlt冻结几分钟
WinAPI BitBlt freezes for minutes
我稍微修改了QScreen::grabWindow函数。不幸的是,在某些计算机上,我没有找到它们之间的关系,BitBlt甚至会冻结几分钟!为什么会发生这种情况,我该怎么办?
QPixmap DetectionFlow::grabScreen(HWND h)
{
RECT rect;
GetClientRect(h, (LPRECT)&rect);
// get the height and width of the screen
int height = rect.bottom - rect.top;
int width = rect.right - rect.left;
// Create and setup bitmap
HDC display_dc = GetDC(0);
HDC bitmap_dc = CreateCompatibleDC(display_dc);
HBITMAP bitmap = CreateCompatibleBitmap(display_dc, width, height);
HGDIOBJ null_bitmap = SelectObject(bitmap_dc, bitmap);
HDC window_dc = GetDC(h);
BitBlt(bitmap_dc, 0, 0, width, height, window_dc, 0, 0, SRCCOPY);
// clean up all but bitmap
ReleaseDC(h, window_dc);
SelectObject(bitmap_dc, null_bitmap);
DeleteDC(bitmap_dc);
const QPixmap pixmap = qt_pixmapFromWinHBITMAP(bitmap);
DeleteObject(bitmap);
ReleaseDC(0, display_dc);
return pixmap;
}
附言。有趣的是,在计算机上,冻结的地方是随机冻结的。所以通常在那里它工作得很快(几毫秒(,然后冻结。
问题出在 Aero 中。使用BitBlt冻结的计算机具有Win7和Aero。没有航空一切都好。
相关文章:
- Boost::posix_time::ptime舍入到给定的分钟数
- 填孔方法需要20分钟以上
- 每秒清除一次终端,但留下几分钟
- WinAPI BitBlt冻结几分钟
- 高频插入 PostgreSQL,插入的数据要到几分钟后才能选择?
- fopen 几分钟后无法打开文件
- 如何杀死等待超过一分钟或 2 分钟的线程C++
- Time_T舍入到几分钟
- 将几秒钟转换为几天,小时,分钟,秒格式(C )
- 将几秒钟转换为小时数分钟的公式是什么?
- 从STD :: String Boost C 获取小时和几分钟
- 将年龄在几年,小时,几分钟和秒的时间内转换
- 动态分配的工作线程在几分钟后泄漏,尽管它不应该
- 将文件数据延迟几分钟
- 在终止/非活动会话上执行简单查询需要几分钟时间
- 为什么Windows服务控制管理器需要几分钟来处理请求
- SQL server timestamp_t的Boost ptime关闭了几分钟.我做错了什么?
- SDL_Surface在游戏运行几分钟后消失
- c++程序需要几分钟来解析大文件,而python只需要几秒钟
- 方法在c++中每隔几分钟调用一个函数