Unhandled exception at 0x004edda7 in imsi_tool.exe: 0xC0000005: Access violation reading location 0x000004dc.DWORD ThreadFunction(LPVOID pParam)//线程函数
{
DWORD dwEvtMask ,dwResult;
tOverLaped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);//创建一个事件
while(IsFun)
{
//等待窗口事件
WaitCommEvent(((Cimsi_toolDlg*)AfxGetMainWnd())->h_Com,&dwEvtMask, &tOverLaped);
//如果事件没有信号,延时0.1秒
dwResult = WaitForSingleObject(tOverLaped.hEvent, 100); if(dwResult == WAIT_OBJECT_0) //事件对象有信号
{
if(dwEvtMask == EV_RXCHAR) //接收到数据
{
if(IsStop)//发送停止
{
IsStop = FALSE;
//发送消息,由消息处理函数接收数据
::PostMessage(AfxGetMainWnd()->m_hWnd, CM_RECEIVE, 0,(LPARAM)EV_RXCHAR);
}
}
}
}
return 0;
}经调试时死在WaitCommEvent(((Cimsi_toolDlg*)AfxGetMainWnd())->h_Com,&dwEvtMask, &tOverLaped);
这行
{
DWORD dwEvtMask ,dwResult;
tOverLaped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);//创建一个事件
while(IsFun)
{
//等待窗口事件
WaitCommEvent(((Cimsi_toolDlg*)AfxGetMainWnd())->h_Com,&dwEvtMask, &tOverLaped);
//如果事件没有信号,延时0.1秒
dwResult = WaitForSingleObject(tOverLaped.hEvent, 100); if(dwResult == WAIT_OBJECT_0) //事件对象有信号
{
if(dwEvtMask == EV_RXCHAR) //接收到数据
{
if(IsStop)//发送停止
{
IsStop = FALSE;
//发送消息,由消息处理函数接收数据
::PostMessage(AfxGetMainWnd()->m_hWnd, CM_RECEIVE, 0,(LPARAM)EV_RXCHAR);
}
}
}
}
return 0;
}经调试时死在WaitCommEvent(((Cimsi_toolDlg*)AfxGetMainWnd())->h_Com,&dwEvtMask, &tOverLaped);
这行
解决方案 »
- 什么动作会触发tabctrl的TCN_GETOBJECT消息
- 在VC++中访问ACCESS数据库时,多种语言的数据的读写如何实现?
- GetModuleHandle这个函数干什么用的,怎么用
- error LNK2001: unresolved external symbol " 求高人指点迷津
- VC++中如何调用JMail.dll(高分)
- 一个在基于windows域的局域网中发送短讯给特定用户的问题
- VC中的操作符重载
- 关于使用QT在word表格中插入图片
- 老的显卡为什么比目前流行的显卡运行的流畅?
- 如何屏蔽按键警告音(焦点在对话框上,按数字键/字母键,时会发出警告音,如何屏蔽掉)???
- CPropertyPage 窗口中的 CStatic 图片,怎么不显示?
- "0x78a572dc"指令引用的"0xccccccc8"内存 该内存不能为"read"
h_Com = CreateFile(strCom, GENERIC_READ|GENERIC_WRITE, 0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
if (h_Com==INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("端口打开失败."));
return;
}这个打开端口是可以的
这句有问题在线程中一般不这样用AfxGetMainWnd()
通过 pParam传个Cimsi_toolDlg* 指针
DWORD param;
hThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction,¶m,0, &dwThreadID);
if (hThread == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("线程创建失败"));
return;
}如何加啊?
Cimsi_toolDlg* pDlg = XXXX;
param = (LPVOID) pDlg;
hThread = CreateThread((LPSECURITY_ATTRIBUTES)NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction,¶m,0, &dwThreadID);线程中解开
DWORD ThreadFunction(LPVOID pParam)//线程函数
{
Cimsi_toolDlg* pDlg = (Cimsi_toolDlg*)pParam;
}
if (hThread == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("线程创建失败"));
return;
}
DWORD ThreadFunction(LPVOID pParam)//线程函数
{
DWORD dwEvtMask ,dwResult;
Cimsi_toolDlg* pDlg = (Cimsi_toolDlg*)pParam; tOverLaped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);//创建一个事件
while(1)
{
//等待窗口事件
WaitCommEvent(pDlg->h_Com,&dwEvtMask, &tOverLaped);
//如果事件没有信号,延时0.1秒
dwResult = WaitForSingleObject(tOverLaped.hEvent, 100); if(dwResult == WAIT_OBJECT_0) //事件对象有信号
{
if(dwEvtMask == EV_RXCHAR) //接收到数据
{
if(IsStop)//发送停止
{
IsStop = FALSE;
//发送消息,由消息处理函数接收数据
::PostMessage(AfxGetMainWnd()->m_hWnd, CM_RECEIVE, 0,(LPARAM)EV_RXCHAR);
}
}
}
}
return 0;
}