读书人

工作线程中使用递归进程退出。怪事。解

发布时间: 2012-01-30 21:15:58 作者: rapoo

工作线程中使用递归进程退出。怪事。
代码如下:
void abc(CDC* pDC, int num)
{


if(num == 0)
return;

abc(pDC,num--);

CString str;
str.Format( "%d ",num);
pDC-> TextOut(0,0,str);
}

UINT ThreadFunc1(LPVOID pParam)
{
CWnd* wnd = (CWnd*)pParam;
CDC* pDC = wnd-> GetDC();
//for(int i=0;i <10000;i++)
//{
//CString str;
//str.Format( "%d ",i);
//pDC-> TextOut(0,0,str);
abc(pDC,1);
//}
return 0;
}


void CFractalDlg::OnButton1()
{
// TODO: Add your control notification handler code here
AfxBeginThread(ThreadFunc1,this);
}

程序按一下按钮执行线程主函数,但是如果像上例中使用了递归,则整个进程也退出。请高手赐教。如何解决这个问题?

[解决办法]
可能是线程堆栈不够,试着打开链接选项
#pragma comment(linker, "/stack:4096 ") // 4MB 栈空间

一般情况下尽量避免深度递归.改进算法.
[解决办法]
GDI不是线程安全的,应该是这个原因吧。
[解决办法]
楼上说的也有可能,试着对DC加锁处理...
[解决办法]
这些工作明显的应该由UI线程来完成。
整个进程退出,应该也有堆栈溢出的问题。
每次传入的num没有变化,形成无穷递归了。
abc(pDC,num--);

读书人网 >VC/MFC

热点推荐