我在一个线程中不断的从串口中读数据并把它放在一个cstring类中
在另一个线程中我从cstring中取出数据
但是我调试的时候发现串口前几次可以正常读取.. 但在后面却返回了995的错误标号(由于线程退出或应用程序请求,已放弃 I/O 操作。 )
而且在另一个线程中读cstring的时候会出错(提示:user breakpoint called from code at 0x7c92120e)(编译的时候不会出错)
我把代码贴上来请各位帮我看一下
谢谢了///这是读数据的代码 bh为资源共享区
WaitForSingleObject(Muters,500L );
double dTime = ::timeGetTime()/1000.0;
double dValue[2];
dValue[0] = bh[0];//bh为资源共享区
dValue[1] = 5*sin(4*dTime+5);// 正弦参数的设定 ReleaseMutex(Muters); 
///////////////////////////////////////////////////////////////////////////////////////////
//这是向bh写数据的线程
DWORD WINAPI FunProc(LPVOID LpParaneter)
{
DWORD length=12;
         char ah[14]={"ppppppppppppp"};
while(1)
{
WaitForSingleObject(Muters,4L);
int da=GetLastError();
ReadFile(hCom,ah,12,&length,NULL);//我在这做了一个断点 发现前几次可以读取串口数据...但是后面就返回995    的错误
int d=GetLastError();
ReleaseMutex(Muters); 
int dc=GetLastError();
;
}
return 0;
}
 

解决方案 »

  1.   

    这个定义一个BUFFER,然后用关键段就可以了
      

  2.   

    能说清楚点么..
    我刚学mfc
    谢谢
      

  3.   

    额.. 打漏了..
    不好意思DWORD WINAPI FunProc(LPVOID LpParaneter)
    {
        DWORD length=12;
             char ah[14]={"ppppppppppppp"};
        while(1)
        {
        WaitForSingleObject(Muters,4L);
        int da=GetLastError();
        ReadFile(hCom,ah,12,&length,NULL);//我在这做了一个断点 发现前几次可以读取串口数据...但是后面就返回995    的错误
        bh+=ah;// 刚刚打少了不好意思呀
       .............
        int d=GetLastError();
        ReleaseMutex(Muters); 
        int dc=GetLastError();
        ;
        }    
        return 0;
    }
      

  4.   

    WaitForSingleObject 的返回值必须是 WAIT_OBJECT_0 才可以继续操作的,你没有检查返回值啊
      

  5.   

    同楼上
    if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
    {
    return;
    }
    ……
      

  6.   

    你确定要这么改?
    我觉得不应该是这么改的..
    首先if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
    这条语句说的是函数的返回值不等于WAIT_OBJECT_0才会执行下面的语句块
    也就是说当函数没有取得信号的时候执行...
    额.. 这就和我的目的相反 了..
    还有
    我要的效果是没有取得信号的时候是延时等候.. 直到取得信号再执行下面的语句 
    .而兄弟你的建议却是没有取得信号就跳过受保护的语句块初学C++和MFC.. 说错了请指正..
    谢谢