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

AfxBeginThread开辟线程的有关问题,一段时间后无法创建

2013-07-08 
AfxBeginThread开辟线程的问题,一段时间后无法创建?本帖最后由 VisualEleven 于 2013-06-28 13:56:29 编辑

AfxBeginThread开辟线程的问题,一段时间后无法创建?
本帖最后由 VisualEleven 于 2013-06-28 13:56:29 编辑 各位好!我现在遇到了一个问题,想请教大家一下。
我使用

CWinThread *pGcodeWorkerMDI;
 pGcodeWorkerMDI=AfxBeginThread( (AFX_THREADPROC) ThreadProcHob,this); 开辟的线程。
if (pGcodeWorkerMDI == NULL)
{
AfxMessageBox(L"代码下发线程创建失败!",MB_OK|MB_ICONERROR);
return;
}

线程函数如下:
UINT WINAPI ThreadProcHob(MCUOutputBufType* lpParam)
{
int i=0;
int unHandValue=0;
theApp.m_writeGCode.InitHardware();
while(1)
{
unHandValue=theApp.m_writeGCode.SiglReadHPI32Bit(0x8834);//读取DSP 缓冲区空闲状态0x55555555;
if (unHandValue==0x55555555)//如果空闲则可以发送数据
{
while(i<NumLine)//当为M02时则结束循环
{
theApp.m_writeGCode.HPIBlockWrite(0x8834,(ULONG *)&m_myOutputBuf[i],sizeof(m_myOutputBuf[i])/4);//发送数据
unHandValue=theApp.m_writeGCode.SiglReadHPI32Bit(0x8834);//读取缓冲区状态
i++;
if(unHandValue==0xaaaaaaaa)//如果忙碌 则一直读取缓冲区状态 直到缓冲区空闲
{
do
{
unHandValue=theApp.m_writeGCode.SiglReadHPI32Bit(0x8834);
}
while(unHandValue!=0x55555555);
}
if(m_myOutputBuf[i-1].Data[0]==0x4D000000&&m_myOutputBuf[i-1].Data[1]==0x02000000)
{
break;
}
}
break;
}
Sleep(30);
}
memset(m_myOutputBuf,0,sizeof(MCUOutputBufType)*25);//清空数组m_myOutputBuf
NumLine=0;//清空加工代码总行号
theApp.m_writeGCode.CloseHardware();
return 0;
}

当程序刚运行时是线程可以开辟的,pGcodeWorkerMDI不是NULL,但当程序运行一个小时后,pGcodeWorkerMDI变为NULL,系统弹出对话框显示:“代码下发线程创建失败”。请问这是为什么呢?为什么线程一段时间后无法开辟了呢?问题出在哪儿了
谢谢各位大侠! 多线程
[解决办法]
用 CreateThread 
GetLastError 看错误代码
[解决办法]
if (pGcodeWorkerMDI == NULL)
{
DWORD err=GetLastError();
AfxMessageBox(L"代码下发线程创建失败!",MB_OK
[解决办法]
MB_ICONERROR);
return;
}
------解决方案--------------------


不是叫你 不用线程,是说“按 你的应用 一个 线程 就够了”
在线程里 判别 ==2.
如果使用 串口 发送 数据 ,参考我的:
“带流控制的串口通讯程序.rar”0分
http://download.csdn.net/detail/schlafenhamster/4195462

[解决办法]
“我最后还是把线程去掉了” 如果 线程 每次 干的 活 不要 很长 时间,就可以 直接 当 函数 调用,
用 线程的 目的 是 防止 界面 ‘假死’

热点排行