Mob*_*erg 6 c++ multithreading
我正在从一个com-port读取数据.由于我不知道数据何时到来,我正在连续阅读一个帖子.
当我读取足够的字节数时,我让主线程通过发布带有指向字符串的指针的消息来了解这一点:
msg[i] = '\0';
completeMsg = new char[i];
strcpy(completeMsg, msg);
PostMessage(hDlg, BT_MSG, NULL, (LPARAM) completeMsg);
i = 0;
Run Code Online (Sandbox Code Playgroud)
主线程对此消息的响应是:
case BT_MSG:
{
char* msg = (char*) lParam;
ShowMsg(msg);
delete [] msg;
break;
}
Run Code Online (Sandbox Code Playgroud)
但看起来不允许在此线程中删除,因为当我执行删除行时出现此错误:
Windows已在SPO.exe中触发断点.
这可能是由于堆的损坏,这表明SPO.exe或它已加载的任何DLL中的错误.
这也可能是由于用户在SPO.exe具有焦点时按下F12.
输出窗口可能包含更多诊断信息.
我应该使用一些全局变量还是发回消息让read-thread处理删除?它没有消息循环atm所以我宁愿不为此添加一个.
如果您链接到编译器的多线程运行时库,您应该能够new在一个线程和另一个线程中使用。delete
然而,看起来你确实有缓冲区溢出。msg您以null 结尾msg[i]=0,但只分配i字节 --- 您可能需要new char[i+1]。
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |