在另一个线程中我从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;
}
9 个解决方案
#1
这个定义一个BUFFER,然后用关键段就可以了
#2
能说清楚点么..
我刚学mfc
谢谢
#3
你的同步主要保护哪个?
看你代码, 没看出俩个互斥下有操作相同部分的代码
看你代码, 没看出俩个互斥下有操作相同部分的代码
#4
额.. 打漏了..
不好意思
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;
}
#5
大家帮帮我呀..
谢谢了..
谢谢了..
#6
WaitForSingleObject 的返回值必须是 WAIT_OBJECT_0 才可以继续操作的,你没有检查返回值啊
#7
同楼上。。。
if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
{
return;
}
……
if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
{
return;
}
……
#8
这个没注意到...
谢谢了..
#9
你确定要这么改?
我觉得不应该是这么改的..
首先if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
这条语句说的是函数的返回值不等于WAIT_OBJECT_0才会执行下面的语句块
也就是说当函数没有取得信号的时候执行...
额.. 这就和我的目的相反 了..
还有
我要的效果是没有取得信号的时候是延时等候.. 直到取得信号再执行下面的语句
.而兄弟你的建议却是没有取得信号就跳过受保护的语句块
初学C++和MFC.. 说错了请指正..
谢谢
#1
这个定义一个BUFFER,然后用关键段就可以了
#2
能说清楚点么..
我刚学mfc
谢谢
#3
你的同步主要保护哪个?
看你代码, 没看出俩个互斥下有操作相同部分的代码
看你代码, 没看出俩个互斥下有操作相同部分的代码
#4
额.. 打漏了..
不好意思
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;
}
#5
大家帮帮我呀..
谢谢了..
谢谢了..
#6
WaitForSingleObject 的返回值必须是 WAIT_OBJECT_0 才可以继续操作的,你没有检查返回值啊
#7
同楼上。。。
if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
{
return;
}
……
if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
{
return;
}
……
#8
这个没注意到...
谢谢了..
#9
你确定要这么改?
我觉得不应该是这么改的..
首先if(WAIT_OBJECT_0!=WaitForSingleObject(Muters,4L))
这条语句说的是函数的返回值不等于WAIT_OBJECT_0才会执行下面的语句块
也就是说当函数没有取得信号的时候执行...
额.. 这就和我的目的相反 了..
还有
我要的效果是没有取得信号的时候是延时等候.. 直到取得信号再执行下面的语句
.而兄弟你的建议却是没有取得信号就跳过受保护的语句块
初学C++和MFC.. 说错了请指正..
谢谢