想while(1)某个步骤,开线程后怎么调用本类的函数?

觅食的猫猫 2014-07-13 11:37:16
要是直接用while(1)界面会直接卡死的

好像必须要用线程,模仿着做了一个,

问题来了:不是类中的函数可以直接调用,类的成员函数或者ShowWindow(SW_SHOW);这种函数无法调用了

我是按这个步骤操作的,谁能帮我看下哪出错了吗

在本来while(1)的地方替换成:


// 创建一个工作线程:
DWORD WINAPI WorkForce(LPVOID lpParameter);
//UINT WorkForce(LPVOID lpParameter);//线程函数声明
CWinThread *pMyFirstWorker;
LPVOID pParam = NULL;
int nPriority = THREAD_PRIORITY_ABOVE_NORMAL;//默认为THREAD_PRIORITY_NORMAL
UINT nStackSize = 0;//与创建它的线程堆栈大小相同
DWORD dwCreateFlags = 0;//创建后立即执行
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ;//与创建它的线程安全属性相同


pMyFirstWorker=AfxBeginThread( (AFX_THREADPROC)WorkForce, pParam, nPriority , nStackSize,
dwCreateFlags , lpSecurityAttrs);


然后再自己找个地方把while(1)放在这个函数里


DWORD WINAPI WorkForce( LPVOID lpParameter ) // 线程所需参数,可以通过它传递数据)
{
while(1)
{
ShowWindow(SW_HIDE); //这儿不能通过编译
Sleep(500);
int e1x=709;
int e1y=689;
int e2x=945;
int e2y=741;
pp1.x=e1x;
pp2.x=e2x;
pp1.y=e1y;
pp2.y=e2y;
moveto(e1x,e1y); //这个函数前面没有类名:: 就能通过
Sleep(500);

OnButtonMax(); //这儿不能通过编译
Sleep(300);
OnButtonSave(); //这儿不能通过编译
Sleep(300);
moveto(e2x,e2y);
Sleep(500);
ido(); //这儿不能通过编译
Sleep(500);
ShowWindow(SW_SHOW); //这儿不能通过编译



// moveto(e2x,e2y);
Sleep(500);
}
}


是不是哪里应该加个原本省略掉的?
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
觅食的猫猫 2014-07-14
  • 打赏
  • 举报
回复
哈哈,终于跑通了 这个while(1)原来在这个类的OnInitDialog()中, 这个对话框是通过前一个对话框的按键里dlg4.Create()生成的 那现在这个对话框是dlg4对吧, pDlg和dlg4应该是同一个对象吧?还是俩不同的?
引用 3 楼 xiaohuh421 的回复:
一般是传this指针到线程函数, 再转换成成员函数. 但要注意, 不要在线程中创建窗口和调用UpdateData函数, 不然会悲剧的. pParam = (void*)this; pMyFirstWorker=AfxBeginThread( (AFX_THREADPROC)WorkForce, pParam, nPriority , nStackSize, dwCreateFlags , lpSecurityAttrs); DWORD WINAPI WorkForce( LPVOID lpParameter ) // 线程所需参数,可以通过它传递数据) { CXXXDlg *pDlg = (CXXXDlg*)lpParameter; if(pDlg) { pDlg->ShowWindow(SW_HIDE); } }
oyljerry 2014-07-14
  • 打赏
  • 举报
回复
线程中发送消息给主线程PostMessage,然后主线程在消息响应函数中进行UI相关的操作
xiaohuh421 2014-07-14
  • 打赏
  • 举报
回复
一般是传this指针到线程函数, 再转换成成员函数. 但要注意, 不要在线程中创建窗口和调用UpdateData函数, 不然会悲剧的. pParam = (void*)this; pMyFirstWorker=AfxBeginThread( (AFX_THREADPROC)WorkForce, pParam, nPriority , nStackSize, dwCreateFlags , lpSecurityAttrs); DWORD WINAPI WorkForce( LPVOID lpParameter ) // 线程所需参数,可以通过它传递数据) { CXXXDlg *pDlg = (CXXXDlg*)lpParameter; if(pDlg) { pDlg->ShowWindow(SW_HIDE); } }
Eleven 2014-07-14
  • 打赏
  • 举报
回复
线程中发送自定义消息到UI线程,在UI线程中去绘制图形。
baichi4141 2014-07-14
  • 打赏
  • 举报
回复
把所需使用的数据通过指针传递 传类指针,就可以调用该类函数 如果需要交互数据,记得加锁 所有界面相关控制放在主线程内

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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