大虾们来看看,怎么解决WaitForSingleObject的问题?
时间:2011-12-01
来源:互联网
{
AfxMessageBox("请先打开串口!");
return;
}
CString strRead;
HANDLE pHandle = GetCurrentThread();//不知道能不能获得线程??
for(int Index = 0;Index<4;Index++)
{
strRead.Format(_T("%c%c"),13,Index);
SendData(strRead);
DWORD dw = WaitForSingleObject(pHandle, 1000);
if(dw == WAIT_OBJECT_0)
{
page[Index] = strReadTemp;//strReadTemp是串口读取的数据,赋值给page
}
else
{
AfxMessageBox(_T("出错!"));
return;
}
}
主要是通过串口发送数据,然后等待反馈,我想通过WaitForSingleObject来获得串口有没有信号,可是dw总不等于WAIT_OBJECT_0,不知道HANDLE pHandle = GetCurrentThread()有没有获得句柄,获得后可不可以使用WaitForSingleObject(pHandle, 1000),怎么实现这一功能,串口是能收到数据的,怎么样才能设置串口接收到数据然后有一个响应?
作者: zzustd 发布时间: 2011-12-01
作者: hnzlk 发布时间: 2011-12-01
作者: hnzlk 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
作者: Lactoferrin 发布时间: 2011-12-01
作者: hnzlk 发布时间: 2011-12-01
作者: VisualEleven 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
将伪句柄转为真正的句柄,用DuplicateHandle
BOOL DuplicateHandle(
HANDLE hSourceProcessHandle,
HANDLE hSourceHandle,
HANDLE hTargetProcessHandle,
LPHANDLE lpTargetHandle,
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwOptions
);
作者: sky101010ws 发布时间: 2011-12-01
作者: Lactoferrin 发布时间: 2011-12-01
这个问题你可以创建Semaphore,然后初始值设为0,有数据来的时候再RleaseSemaphore()
DWORD dw = WaitForSingleObject(Semaphore, INFINITE);
有数据来的时候RleaseSemaphore(),然后dw就会==wait_object_0
作者: hnzlk 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
CreateSemaphore
作者: Lactoferrin 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
作者: zzustd 发布时间: 2011-12-01
你可以在你程序里判断是否返回为WAIT_TIMEOUT或者WAIT_FAILED,如果是WAIT_FAILED,用GetLastError判断下错误原因,很容易就可以解决了。
不过在自己线程里等待线程结束,不管这个线程句柄是否是真是假,楼主开始的逻辑就出问题了。
作者: rongrong0538 发布时间: 2011-12-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28