运行EVC编的读串口程序运行一段时间后点击PPC的开始菜单就会死机???

sense 2005-07-29 09:15:09
不知道为什么
...全文
129 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwch99 2006-04-04
  • 打赏
  • 举报
回复
retrieve=ReceiveBuf后就与ReceiveBuf没有关系了。??
应该是数据拷贝吧 memcpy().移动指针后,局部变量会被释放,全局指针指向非法区域.
sense 2005-08-01
  • 打赏
  • 举报
回复
确定是字符串
Mr_Ldh 2005-08-01
  • 打赏
  • 举报
回复
retrieve是全局的,retrieve=ReceiveBuf后就与ReceiveBuf没有关系了。
但是你能保证ReceiveBuf中接收到的数据一定是字符串吗?
sense 2005-08-01
  • 打赏
  • 举报
回复
会不安全?
那应该怎么做比较好?
samp_miao 2005-08-01
  • 打赏
  • 举报
回复
运行EVC编的读串口程序运行一段时间后点击PPC的开始菜单就会死机???

是死机还是程序占用CPU太多,使得界面上没有变化,你多等一断时间看看。
我当时循环读写COM口时候,耗CPU太多,界面也是很久才看出来变化。

retrieve=ReceiveBuf;
这个ReceiveBuf是一个局部变量,发给主窗口会不会不安全呢?
红牛哥110 2005-07-29
  • 打赏
  • 举报
回复
呵呵,代码有问题,你又没贴 一点代码,很难帮到你.
Mr_Ldh 2005-07-29
  • 打赏
  • 举报
回复
程序有问题。内存溢出,或其它非法操作。
西山小月 2005-07-29
  • 打赏
  • 举报
回复
用什么方式读的,贴代码出来看看
sense 2005-07-29
  • 打赏
  • 举报
回复


我刚学EVC一个星期,做了一个用线程读取串口信息的程序!!

大概会在哪出错!!谁能提点一下!!!
Mr_Ldh 2005-07-29
  • 打赏
  • 举报
回复
对WM_MYMSG消息是如何处理的?
sense 2005-07-29
  • 打赏
  • 举报
回复
问题是我如果不做其他操作,程序就一直没问题啊!
----------------
HANDLE hSerial=NULL;
CString retrieve;
void CPDADlg::OnGpsConnect()
{
// TODO: Add your command handler code here
//WriteFile (hSerial, // 句柄&Byte, // 数据缓冲区地址nByte, // 数据大小&dwNumBytes, // 返回发送出去的字节数NULL // 不支持重叠);
if(hSerial!=NULL && hSerial!=INVALID_HANDLE_VALUE)return;
hSerial = CreateFile(_T("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
/////L"串口打开失败";
if(hSerial == NULL)return;

///配置串口

DCB PortDCB;
PortDCB.DCBlength = sizeof(DCB);
// 默认串口参数
GetCommState(hSerial, &PortDCB);
PortDCB.BaudRate = 9600; // baud
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY;
//PortDCB.StopBits = ONESTOPBIT;
PortDCB.StopBits = ONE5STOPBITS;
///L"配置串口失败";
if (! SetCommState(hSerial, &PortDCB))return;

////配置超时值

COMMTIMEOUTS CommTimeouts;

GetCommTimeouts(hSerial, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
///L"不能设置超时参数";
if (!SetCommTimeouts(hSerial, &CommTimeouts))return;
AfxBeginThread(ReadThread, NULL);
}

UINT ReadThread(LPVOID pParam)
{
int iCounter = 0;
DWORD dwBytes;
char ReceiveBuf[201]; ///缓冲区的大小
//AfxMessageBox(_T("b"));
SetCommMask (hSerial, EV_RXCHAR); //只接收字符

while (hSerial != INVALID_HANDLE_VALUE && hSerial != NULL)
{
DWORD dwCommStatus;
WaitCommEvent(hSerial, &dwCommStatus, 0);
SetCommMask (hSerial, EV_RXCHAR); ///重新设置要等待的信号 if(!ReadFile(hSerial, &ReceiveBuf, 200, &dwBytes, 0))continue;
ReceiveBuf[dwBytes]=NULL;
retrieve=ReceiveBuf;
SendMessage(AfxGetMainWnd()->m_hWnd,WM_MYMSG,NULL,NULL);//调用自定义事件
Sleep(200);
iCounter = 0; ////清空计数器
}
return 0;
}

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧