win32: 怎么用多线程在屏幕上画65536条线?

huangliluckystar 2009-03-11 02:46:34
如题,在线等。。。。。
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangliluckystar 2009-03-11
  • 打赏
  • 举报
回复
咋就没人了呢。。。。。。
huangliluckystar 2009-03-11
  • 打赏
  • 举报
回复
我有试过只创建一个线程,可是还是很慢。。。
void DrawGraph(HWND hDlg)
{
HDC hdc = ::GetDC(hDlg);
hThrd = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, &threadId);
}
DWORD WINAPI ThreadFunc(LPVOID indexWidth)
{
HDC hdc = ::GetDC(g_hWndCommandBar);

for (int indexWidth = 0; indexWidth < 256; indexWidth++)
{
for (int indexHeigh = 0; indexHeigh < 256; indexHeigh++)
{
HBRUSH hbrush = ::CreateSolidBrush(RGB(g_nRed, g_nGreen, g_nBlue));
RECT rect = {g_nWidth, g_nHeigh, g_nWidth + 800.0/256 , g_nHeigh + 600.0 /256 };
::FillRect(hdc, &rect, hbrush);
g_nWidth = indexHeigh * 800.0/256.0;
g_nGreen = (g_nGreen + 1);
::DeleteObject(hbrush);
}
g_nHeigh = indexWidth * 600.0/256.0;
g_nGreen = (g_nGreen + 1);
}
return 0;
}
Chivalry 2009-03-11
  • 打赏
  • 举报
回复
不需要再循环里多次创建县城,创建一个,然后再处理
huangliluckystar 2009-03-11
  • 打赏
  • 举报
回复
void DrawGraph(HWND hDlg)
{
HDC hdc = ::GetDC(hDlg);
for (int indexWidth = 0; indexWidth < 256; indexWidth++)
{
::InitializeCriticalSection(&g_cs);
g_nHeigh = indexWidth * 600.0/256.0;
g_nGreen = (g_nGreen + 1);
hThrd[indexWidth] = CreateThread(NULL, 0, ThreadFunc, (LPVOID)indexWidth, 0, &threadId);
}
for (int indexWidth = 0; indexWidth < 256; indexWidth++)
{
::WaitForSingleObject(hThrd[indexWidth], INFINITE);
::CloseHandle (hThrd[indexWidth]);

}
}
一些初始化没copy下来
DWORD WINAPI ThreadFunc(LPVOID indexWidth)
{
HDC hdc = ::GetDC(g_hWndCommandBar);
//g_nHeigh = indexWidth * 600.0/256.0;
::EnterCriticalSection(&g_cs);

for (int indexHeigh = 0; indexHeigh < 256; indexHeigh++)
{

HBRUSH hbrush = ::CreateSolidBrush(RGB(g_nRed, g_nGreen, g_nBlue));
RECT rect = {g_nWidth, g_nHeigh, g_nWidth + 800.0/256 , g_nHeigh + 600.0 /256 };
::FillRect(hdc, &rect, hbrush);
g_nWidth = indexHeigh * 800.0/256.0;
g_nGreen = (g_nGreen + 1) % 255;
::DeleteObject(hbrush);
}
::LeaveCriticalSection(&g_cs);
return 0;
}
我在做LCD测试,画65536种颜色,可是不用线程会很慢,用线程又达不到效果。。。。不知错在哪
huangliluckystar 2009-03-11
  • 打赏
  • 举报
回复
void DrawGraph(HWND hDlg)
{
HDC hdc = ::GetDC(hDlg);
for (int indexWidth = 0; indexWidth < 256; indexWidth++)
{
::InitializeCriticalSection(&g_cs);
g_nHeigh = indexWidth * 600.0/256.0;
g_nGreen = (g_nGreen + 1);
hThrd[indexWidth] = CreateThread(NULL, 0, ThreadFunc, (LPVOID)indexWidth, 0, &threadId);
}
for (int indexWidth = 0; indexWidth < 256; indexWidth++)
{
::WaitForSingleObject(hThrd[indexWidth], INFINITE);
::CloseHandle (hThrd[indexWidth]);

}
}
一些初始化没copy下来
DWORD WINAPI ThreadFunc(LPVOID indexWidth)
{
HDC hdc = ::GetDC(g_hWndCommandBar);
//g_nHeigh = indexWidth * 600.0/256.0;
::EnterCriticalSection(&g_cs);

for (int indexHeigh = 0; indexHeigh < 256; indexHeigh++)
{

HBRUSH hbrush = ::CreateSolidBrush(RGB(g_nRed, g_nGreen, g_nBlue));
RECT rect = {g_nWidth, g_nHeigh, g_nWidth + 800.0/256 , g_nHeigh + 600.0 /256 };
::FillRect(hdc, &rect, hbrush);
g_nWidth = indexHeigh * 800.0/256.0;
g_nGreen = (g_nGreen + 1) % 255;
::DeleteObject(hbrush);
}
::LeaveCriticalSection(&g_cs);
return 0;
}
我在做LCD测试,画65536种颜色,可是不用线程会很慢,用线程又达不到效果。。。。不知错在哪
Chivalry 2009-03-11
  • 打赏
  • 举报
回复
你有什么问题?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧