多线程不能调用函数的吗?

长尾巴的悟空 2012-07-08 10:21:45

我定义了一个对话框程序,加了个线程,可是一些函数调用却编译提示,未定义?这是怎么回事?
怎么解决?

DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{


//MessageBox("hello"); 认不到
//ShowHello(); 认不到。。。
AfxMessageBox("hello") 通过
return 1;

}

void CAaaDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HANDLE hThread1;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
CloseHandle(hThread1); //关闭线程句柄
MessageBox("hello");




}

void CAaaDlg::ShowHello()
{
MessageBox("hello");

}
...全文
323 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaiI0 2012-07-08
  • 打赏
  • 举报
回复
Fun1Proc是个全局函数,::MessageBox这样应该就可以,ShowHello就没办法了,要么自定义个消息,在线程函数里SendMessage/PostMessage给主窗口,要么把对话框指针作为线程参数传过去,推荐用前一种方法。
蒋晟 2012-07-08
  • 打赏
  • 举报
回复
m_pThread=AfxBeginThread (RUNTIME_CLASS(CFun1Thread),(LPVOID)m_hWnd,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
m_pThread->m_bAutoDelete=false;
m_pThread->ResumeThread();

void CAaaDlg::OnDestory()
{
if(m_pThread)
m_pThread->AbortIfStillRunning();
theApp.AddThreadToWaitingList(m_pThread);
theApp.WaitForRunningThreads();
theApp.DeleteCompletedThreads();
CDialog::OnDestory();
}


长尾巴的悟空 2012-07-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
不能这样调用的,ShowHello是CaaDlg的成员函数啊,在外部不可以这么调用。
[/Quote]

那应该要怎么调用呢?
以免我忘记 2012-07-08
  • 打赏
  • 举报
回复
还有啊,不要在线程中用messagebox,不怎么好,你要是想用提示的话可以用postmessage
以免我忘记 2012-07-08
  • 打赏
  • 举报
回复
不能这样调用的,ShowHello是CaaDlg的成员函数啊,在外部不可以这么调用。
长尾巴的悟空 2012-07-08
  • 打赏
  • 举报
回复
哈哈,番然醒悟!
CCDDzclxy 2012-07-08
  • 打赏
  • 举报
回复
本来以为是菜鸟提问~~
赫然看到5角星,我纠结了,我要去看眼科医生,脑科医生...
xiaohuh421 2012-07-08
  • 打赏
  • 举报
回复
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
CAaaDlg *pDlg = (CAaaDlg*)lpParameter;
if( pDlg)
{
pDlg->MessageBox("Hello");
//或者::MessageBox(pDlg->m_hWnd,"Hello");
pDlg->ShowHello();
}

//MessageBox("hello"); 认不到
//ShowHello(); 认不到。。。
AfxMessageBox("hello") 通过
return 1;

}

void CAaaDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HANDLE hThread1;
hThread1 = CreateThread(NULL,0,Fun1Proc,(void*)this,0,NULL);
CloseHandle(hThread1); //关闭线程句柄
MessageBox("hello");

}

15,473

社区成员

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

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