Createthread开线程,显示参数类型不兼容

BlackHamlet 2017-09-15 06:00:57
线程函数定义是
DWORD WINAPI CDATEDlg::Press(LPVOID p)
{
........................
}

然后在对话框的按钮点击里加上

HANDLE hThread;
DWORD id;
hThread = CreateThread(0,0,Press,0,0,0);

提示:
...全文
791 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-09-18
  • 打赏
  • 举报
回复
"PressThread函数也是声明在对话框类里吗?" 最好不要 放 对话框中(加 static 只是语法糖) 就 是全局 函数 而已
BlackHamlet 2017-09-18
  • 打赏
  • 举报
回复
引用 4 楼 smwhotjay 的回复:
DWORD WINAPI PressThread(LPVOID p) { CDATEDlg* dlg=(CDATEDlg*)p; dlg->Press(xxx); } DWORD WINAPI CDATEDlg::Press(LPVOID p) 不变 hThread = CreateThread(0,0,PressThread,this,0,0);
PressThread函数也是声明在对话框类里吗?
worldy 2017-09-18
  • 打赏
  • 举报
回复
DWORD WINAPI CDATEDlg::Press(LPVOID p)这个函数必须定义为静态函数
  • 打赏
  • 举报
回复
引用 2 楼 u011648839 的回复:
[quote=引用 1 楼 smwhotjay 的回复:] DWORD WINAPI CDATEDlg::Press(LPVOID p) 类成员函数无法做线程因为不是全局的, static DWORD WINAPI CDATEDlg::Press(LPVOID p) 静态的就可以了。
我改成静态之后,press函数中对类成员函数的调用就都没法用了 =-=[/quote] 最好不要在线程里面调用对话框的东西,可以用发消息的方式进行,发到窗口。 虽然我开始也经常这么做,似乎也没有什么大问题,那是因为比较简单的时候。 如果比较复杂的逻辑,这样很容易出现问的。
smwhotjay 2017-09-15
  • 打赏
  • 举报
回复
DWORD WINAPI PressThread(LPVOID p) { CDATEDlg* dlg=(CDATEDlg*)p; dlg->Press(xxx); } DWORD WINAPI CDATEDlg::Press(LPVOID p) 不变 hThread = CreateThread(0,0,PressThread,this,0,0);
schlafenhamster 2017-09-15
  • 打赏
  • 举报
回复
通过 LPVOID p 把 对话框 m_hWnd 传 过去。
BlackHamlet 2017-09-15
  • 打赏
  • 举报
回复
引用 1 楼 smwhotjay 的回复:
DWORD WINAPI CDATEDlg::Press(LPVOID p) 类成员函数无法做线程因为不是全局的, static DWORD WINAPI CDATEDlg::Press(LPVOID p) 静态的就可以了。
我改成静态之后,press函数中对类成员函数的调用就都没法用了 =-=
smwhotjay 2017-09-15
  • 打赏
  • 举报
回复
DWORD WINAPI CDATEDlg::Press(LPVOID p) 类成员函数无法做线程因为不是全局的, static DWORD WINAPI CDATEDlg::Press(LPVOID p) 静态的就可以了。

15,471

社区成员

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

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