首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-01-30 
工作线程中使用递归进程退出。怪事。代码如下:voidabc(CDC*pDC,intnum){if(num0)returnabc(pDC,num--)CS

工作线程中使用递归进程退出。怪事。
代码如下:
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--);

热点排行