MFC OnPaint问题
我在对话框上取一点,(0,200),再将X右移40,Y不变取点(40,200),连线(0,200)-(40,200);相隔50秒,以(40,200)为起点,X再右移40,...
我在对话框上取一点,(0,200),再将X右移40,Y不变取点(40,200),连线(0,200)-(40,200);相隔50秒,以(40,200)为起点,X再右移40 ,连线(40,200)-(80,200);再相隔50秒 ……以此类推,程序一直运行,在界面看见的是缓慢的画直线动作,且遇到直线越界时,调用滚动条函数(ScrollWindow(-300,0,NULL,NULL))滚动对话框显示;。如果不希望程序一直处于划线的死机状态,该如何操作?
多线程函数怎么写呢,首先我在头文件中声明线程函数
static void ThreadFunc();
再在头文件添加protected型变量:
HANDLE hThread;
DWORD ThreadID;
分别代表线程的句柄和ID。
接着编写线程函数
void CMultiThread1Dlg::ThreadFunc()
{
OnPaint();
}
最后创建线程
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
NULL,
0,
&ThreadID);
可是这样子编译会出错,提示illegal call of non-static member function 展开
多线程函数怎么写呢,首先我在头文件中声明线程函数
static void ThreadFunc();
再在头文件添加protected型变量:
HANDLE hThread;
DWORD ThreadID;
分别代表线程的句柄和ID。
接着编写线程函数
void CMultiThread1Dlg::ThreadFunc()
{
OnPaint();
}
最后创建线程
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
NULL,
0,
&ThreadID);
可是这样子编译会出错,提示illegal call of non-static member function 展开
4个回答
展开全部
多线程应该这样:
DWORD WINAPI DrawLine( LPVOID lpVoid )
{
CDC * pDC = ( CDC * ) lpVoid;
while( m_bRuning )
{
// 这里添加你的绘图操作
if( m_bRuning )
Sleep( 50000 ); // 延时50秒
}
return 0;
}
这个函数应该是全局的。如果非要把它做成类的成员函数,那么必须是静态的。
创建线程地方
CreateThread( NULL, ..... &dc, .... );
就是要把客户区的DC地址作为参数传入。
程序关闭的地方:
WM_CLOSE或者窗口的WM_NCDESTORY函数中:
默认操作之前加入:
m_bRuning = false;
WaitForSingleObject( m_hThreadHandle, -1 );
OK。
DWORD WINAPI DrawLine( LPVOID lpVoid )
{
CDC * pDC = ( CDC * ) lpVoid;
while( m_bRuning )
{
// 这里添加你的绘图操作
if( m_bRuning )
Sleep( 50000 ); // 延时50秒
}
return 0;
}
这个函数应该是全局的。如果非要把它做成类的成员函数,那么必须是静态的。
创建线程地方
CreateThread( NULL, ..... &dc, .... );
就是要把客户区的DC地址作为参数传入。
程序关闭的地方:
WM_CLOSE或者窗口的WM_NCDESTORY函数中:
默认操作之前加入:
m_bRuning = false;
WaitForSingleObject( m_hThreadHandle, -1 );
OK。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你要搞个多线程才行,在后台线程里面画图
CreatThread 函数
CreatThread 函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以在鼠标消息中去取消计时器啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询