程序再调试模式中没事,在发布模式下就出错了。 
查了下是线程的问题 
::PostMessage(zhen->hwnd,WM_SEND,0,0); 
Sleep(1000); 
::PostMessage(zhen->hwnd,WM_SEND1,0,0); 
Sleep(1000); 
::PostMessage(zhen->hwnd,WM_SEND2,0,0); 
Sleep(1000); 
线程是对话框初始化就创建的,要一直存在。 
这3句注释掉就没事。 
因为要发送消息给本窗口,所以参数带入了窗口句柄。 
是不是在工作者线程了调用了UI界面的缘故。 
日啊,急啊。 
希望大家帮帮我。

解决方案 »

  1.   

    估计是hwnd无效。需要线程的创建代码。
      

  2.   

    我不知道是哪儿出了问题
    不过LZ可以在Release模式下查看一下hwnd到底有效不?
      

  3.   

    ::PostMessage(zhen->hwnd,WM_SEND,0,0); 
    改成这样试试
    if(zhen->hwnd){
        ::PostMessage(zhen->hwnd,WM_SEND,0,0); 
    }
    在这个
    ::PostMessage(zhen->hwnd,WM_SEND,0,0); 
    Sleep(1000); 
    ::PostMessage(zhen->hwnd,WM_SEND1,0,0); 
    Sleep(1000); 
    ::PostMessage(zhen->hwnd,WM_SEND2,0,0); 
    Sleep(1000); 
    前面加个Sleep(10*1000)试试是不是走到这里的时候窗口还没有完全创建好?
    其他的类似如果不行
    这样改改试试
    zhen->PostMessage(WM_SEND,0,0); 
      

  4.   

    最新调试修改
    UINT CWorkDlg::threadproc(LPVOID param)
    {  
        SBlei *zhen=(SBlei*)param;
        while(zhen->bo)
    {
    if(zhen->boo)
    {
                     //::PostMessage(zhen->hwnd,WM_SEND,0,0);
               //Sleep(1000);
                       //::PostMessage(zhen->hwnd,WM_SEND1,0,0);
                       //Sleep(1000);
               //::PostMessage(zhen->hwnd,WM_SEND2,0,0);
                       //Sleep(1000);
    }
    }
            return 0;
    }CWorkDlg::~CWorkDlg()
    {
    if(m_thread!=NULL)
    {
           ks.bo=false;
       ::WaitForSingleObject(m_thread->m_hThread,INFINITE);
           m_thread=NULL;
    }
    }
    线程改在按钮里创建
    if(m_thread==NULL)
    m_thread=AfxBeginThread(threadproc,&ks);
    我关了程序后,任务管理器还有我的进程,而且cpu占用率很搞98%
    是不是线程没关掉?
      

  5.   

    句柄的获得我也改在和创建线程那里ks.hwnd=this->m_hWnd;
      

  6.   

    UINT CWorkDlg::threadproc(LPVOID param) 

        SBlei *zhen=(SBlei*)param; 
        while(zhen->bo) 

    if(zhen->boo) 

                  //::PostMessage(zhen->hwnd,WM_SEND,0,0); 
              //Sleep(1000); 
                      //::PostMessage(zhen->hwnd,WM_SEND1,0,0); 
                      //Sleep(1000); 
              //::PostMessage(zhen->hwnd,WM_SEND2,0,0); 
                      //Sleep(1000); 


            return 0; 
    } 这里面为什么
    while(zhen->bo) 
    中是zhen->bo而在if中是
    zhen->boo笔误?
      

  7.   

    UINT CWorkDlg::threadproc(LPVOID param)
    线程这样调用有没问题
    还是要UINT threadproc(LPVOID param)
    可我改成这样一样出错,我已经没毅力学MFC了。
    哎,好难学啊。
      

  8.   

    我一气之下把在调试模式下的C/C++选项的Project Options下的内容全部拷贝到发布模式下进行替换,
    这样就没错了,可这样有什么区别,是不是又变成了调试模式了。
    这样打包会不会有问题?
    调试模式打包和发布模式打包的区别是什么?