程序再调试模式中没事,在发布模式下就出错了。
查了下是线程的问题
::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界面的缘故。
日啊,急啊。
希望大家帮帮我。
查了下是线程的问题
::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界面的缘故。
日啊,急啊。
希望大家帮帮我。
不过LZ可以在Release模式下查看一下hwnd到底有效不?
改成这样试试
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);
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%
是不是线程没关掉?
{
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笔误?
线程这样调用有没问题
还是要UINT threadproc(LPVOID param)
可我改成这样一样出错,我已经没毅力学MFC了。
哎,好难学啊。
这样就没错了,可这样有什么区别,是不是又变成了调试模式了。
这样打包会不会有问题?
调试模式打包和发布模式打包的区别是什么?