我的教训,希望大家借鉴,

woaini5994 2003-09-21 10:35:52
void CThreadDlg::OnButton1()
{
// TODO: Add your control notification handler code here

CWinThread* pThread=AfxBeginThread(ThreadProc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
}
UINT CThreadDlg::ThreadProc(LPVOID pParam)
{
MessageBox("线称");
return 0;
}
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
函数都已经在头文件中声明了,参数的错误吧,那么我这么调用可以么?
static UINT ThreadProc(LPVOID pParam) 在头文件中如果,不按照这样生命的话,就会出现上述的错误
为什么必须声名成静态的呢,不是很理解,请高手帮忙。
为什么线程的函数必须是一个全局的或者是静态的,
我理解的是在,在编译器进行编译的时候,就已经为线程的函数创建了一块存储的空间,它的存在贯穿程序
执行的全过程,以便在程序刚执行的时候,或者是在需要的时候 开启一个或多个线程,去完成特定的任务,
在我上面的代码。就是当按钮事件
触发的时候,才开启我自己的线程,去实现我制定的任务,请问上述理解有什么问题么,请高手解盘:)
正在猜足球彩票,就用盘口术语了:);
...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
up
huang_yu 2003-09-21
  • 打赏
  • 举报
回复
明白了。
woaini5994 2003-09-21
  • 打赏
  • 举报
回复
豁然开朗
tonybaobao 2003-09-21
  • 打赏
  • 举报
回复
你的线程函数如果要放在类里面,必须是static的,使她不属于任何一个对象,否则每创建一个类的实例,就来一个线程,那不乱套了?一般你还是放在类外比较好。放在类内的话,你ThreadProc必须强制类型转换,具体我忘记了,你看看AfxBeginThread的第一个参数类型就知道了。
tonybaobao 2003-09-21
  • 打赏
  • 举报
回复
AfxBeginThread(ThreadProc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);//前面的东西去掉,你这是工作线程,不是界面线程

16,551

社区成员

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

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

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