将GetDC代码移动到线程中时,性能会大大降低

将GetDC代码移动到线程中时,性能会大大降低,c,windows,multithreading,user-interface,gdi,C,Windows,Multithreading,User Interface,Gdi,对于下一个问题,最近我发现性能下降的问题实际上是由于将GetDC代码移动到一个线程中引起的,该线程最初放在WindowProc/WndProc函数中,但我不知道细节 有人能帮我吗 毕竟,这是我的代码: 快一点: #包括 #包括 #包括 #定义数字4 #定义宽度1 双位[num][2]={733434}、{633384}、{733284}、{733684}、{733684}; 双速度[num][2]={-5,2.5},{5,-2.5},{0,2.5},{10,-2.5}; COLORREF col

对于下一个问题,最近我发现性能下降的问题实际上是由于将GetDC代码移动到一个线程中引起的,该线程最初放在WindowProc/WndProc函数中,但我不知道细节

有人能帮我吗

毕竟,这是我的代码:

快一点:

#包括
#包括
#包括
#定义数字4
#定义宽度1
双位[num][2]={733434}、{633384}、{733284}、{733684}、{733684};
双速度[num][2]={-5,2.5},{5,-2.5},{0,2.5},{10,-2.5};
COLORREF color[num]={0xffffff,0x00ffff,0x0000ff,0xffff00};
COLORREF背景颜色=0x000000;
双倍距离;
int计数,i,j;
HDC-HDC[num];
HPEN-HPEN[num];
内联双sqr(双x){返回x*x;}
DWORD WINAPI threadProc(LPVOID LPParameter){
睡眠(1000);
而(1){

对于(i=0;i您正在向
threadProc
传递一个指向局部变量的指针。退出
WindowProc
后,它的局部变量不再有效。 您可以通过值传递
HWND

case WM_CREATE: {
    HANDLE hThread = CreateThread(NULL, 0, threadProc, (LPVOID)hwnd, 0, NULL);
    CloseHandle(hThread);
    return 0;
  }
并读取其值,以便:

DWORD WINAPI threadProc(LPVOID lpParamter) {
  HWND hwnd = (HWND)lpParamter;

HWND
不是指针(8字节?)?尝试以64字节对齐方式传递数据。您正在将指向局部变量的指针传递给threadProc。尝试按值传递。还描述如何衡量性能。为什么您在CreatePen中而不是在SelectObject和MoveToEx中确定该任务?这2个api(和LineTo)使用设备上下文,它属于窗口,而窗口属于线程。如果您从另一个线程调用此api,则需要与所有者(main)进行一些同步线程在这里-你不这么认为吗?真的将此代码移动到工作线程只会降低性能。你的线程在以太周期中使用大量CPU时间绘制线条。最好将所有绘制代码移动到
WM_PAINT
处理程序。仅当需要重新绘制时才会调用此处理程序。我发现如果hwnd为NULL,则效果为al太慢了。可能是windows.h在hwnd为NULL时创建了另一个窗口?获取它!如果该值(hwnd)为NULL,则GetDC检索整个屏幕的DC。