64,691
社区成员
发帖
与我相关
我的任务
分享
void CMultiThread7Dlg::OnSum()
{
// TODO: 在此添加控件通知处理程序代码
//创建一个线程
m_pCalculateThread = new CCalculateThread();
m_pCalculateThread->CreateThread();
// m_pCalculateThread = (CCalculateThread*)
// AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
//m_pCalculateThread->PostThreadMessage(WM_CALCULATE,m_nNum, NULL);
Sleep(500);
::PostMessage(m_pCalculateThread->m_pMainWnd->m_hWnd ,WM_CALCULATE, 1000, NULL) ;
}
DECLARE_DYNCREATE(CCalculateThread)
IMPLEMENT_DYNCREATE(CCalculateThread, CWinThread)
@2 线程类无法收到 主对话发送的消息时应为, 在线程类中, 没有重写
virtual BOOL InitInstance();
virtual int ExitInstance();
且在BOOL InitInstance()中 不能简单的 return CWinThread::InitInstance(),
必须 return true.
CCalculateThread* cct= (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
全局的也不行, 第一步就通不过,提示 “内存不足”! 网上也有不少人提这个 问题。。[/quote]
我代码里面就这么写的。完全没有问题。。。[/quote]
阁下能否把 源代码 发给我 272180850@qq.com ,以便结贴。
CCalculateThread* cct= (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
CCalculateThread* cct= (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
全局的也不行, 第一步就通不过,提示 “内存不足”! 网上也有不少人提这个 问题。。[/quote]
我代码里面就这么写的。完全没有问题。。。
CCalculateThread* cct= (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
全局的也不行, 第一步就通不过,提示 “内存不足”! 网上也有不少人提这个 问题。。
BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)
@2 ON_MESSAGE(WM_DisPlay, OnDisplay)
ON_THREAD_MESSAGE(WM_CALCULATE, OnCalculate)
END_MESSAGE_MAP();
上面有两处不一样 @1 和@2 会不会有影响。。?
void CCalculateThread::OnCalculate(WPARAM wParam,LPARAM lParam)
{
int nTemp = 0;
for (int i = 1; i<=(int)wParam; i++ )
{
nTemp += i;
}
Sleep(100);
::PostMessage((AfxGetMainWnd()->GetSafeHwnd()),WM_DISPLAY, nTemp, NULL) ;
return ;
}
WM_DISPLAY 在主要窗口中已经定义了。
如果把
::PostMessage((AfxGetMainWnd()->GetSafeHwnd()),WM_DISPLAY, nTemp/*100*/, NULL) ;
放在 住窗口的void CMultiThread7Dlg::OnSum(); 函数中去调用是没有问题的,
也就是说 子线程中 发送的消息是没有问题的, 只是在 主对话框中 消息没有发送成功,导致我的子线程消息响应函数没有被 触发。。。。