VC中MFC创建了多线程,界面怎么还会有卡死现象,但程序在正确执行(可以执行出结果)

多线程说明classCMULIMADLG:publicCDialog{public:staticDWORDWINAPIThreadProc(LPVOIDlpParam);... 多线程说明
class CMULIMADLG : public CDialog
{
public:
static DWORD WINAPI ThreadProc( LPVOID lpParam );
}
在主线程中写出以下代码
m_FrameNum=1;
HANDLE hThread=CreateThread(NULL,0,ThreadProc,(void*)this,0,NULL);
Sleep(time*1000+100);
*****************************************
最后在.CPP中写入以下程序
DWORD WINAPI CMULIMADLG::ThreadProc(LPVOID lpParam)
{
CMULIMADLG *pDlg = (CMULIMADLG*)lpParam;
ASSERT(pDlg);
pDlg->SavetoCache(); // 或者其他的什么函数都可以
return 0;
}

void CMULIMADLG::SavetoCache()
{
while(TRUE)
{
Sleep(delay); //间隔时间
m_csDrawImg.Enter();
if(m_FrameNum <= m_ImageNum+1)
{
memcpy(m_BufAddress,m_pBufferRGB,m_nPayLoadSize*3);
m_BufAddress=m_BufAddress+m_nPayLoadSize*3;
m_FrameNum=m_FrameNum+1;
m_csDrawImg.Leave();
}
else
{
m_csDrawImg.Leave();
break;
}
}
}
是sleep原因?缓存原因还是什么呢,跪求大神讲解
展开
 我来答
挨踢老李
2013-09-19 · TA获得超过876个赞
知道小有建树答主
回答量:1176
采纳率:50%
帮助的人:966万
展开全部
创建完线程后主线程 Sleep(time*1000+100);
当然卡死了
更多追问追答
追问
sleep后不是执行新线程吗?,等睡醒后在执行主线程呢
追答
主线程一旦Sleep,界面就卡死了。
主线程不能Sleep
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huang71216
2013-09-19 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:86.2万
展开全部
主线程的Sleep时间太长了
追问
那我想主线程等待一定时间来执行新线程要怎么实现呢
追答
可以将工作线程挂起,然后执行。
线程类Thread的Suspend() 和 Resume() 方法可以用来挂起/恢复线程。
也可以使用WinAPI函数SuspendThread与ResumeThread。
具体如下:
1、DWORD SuspendThread(HANDLE hThread);
该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。
2、DWORD ResumeThread(HANDLE hThread);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式