我想问下多线程和串口通信mscomm控件的问题

flyjincun 2013-07-29 05:26:42
我现在是这么个情况,1、先用mscomm控件编写了串口通信,然后发数据,我想用多线程的方式来一组一组的发数据,部分程序如下:但是一运行就中断,不知道怎么弄,
2、还有一个问题就是我不知道我要用到多少子线程,不过在程序运行的时候就知道有多少组数据了,一组数据对应一个线程,我该怎么写?
其中一个子线程例子如下:
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
WaitForSingleObject(hMutex,INFINITE);
while(TRUE)
{
char ch[100];
CTestDlg *pDlg=(CTestDlg*)lpParameter;
CByteArray Array;
const int count=3;
BYTE buf[count];
Array.RemoveAll();
Array.SetSize(count);
if(BST_UNCHECKED==pDlg->IsDlgButtonChecked(IDC_CHECK))
{
Sleep(waittime*1000);
while (pos11==pos1)
{
Sleep(100);
buf[0]=0xFF;
buf[1]=0x23;
buf[2]=0x11;
for(int i=0;i<count;i++)
Array.SetAt(i,buf[i]);
pDlg->m_mscomm.put_OutBufferCount(0);
pDlg->m_mscomm.put_Output(COleVariant(Array));//这里就一运行就一直中断

}
}

break;
}

ReleaseMutex(hMutex);
return 0;
}
...全文
177 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-07-30
  • 打赏
  • 举报
回复
串口发送数据和是不是子对话框没关系吧 直接api操作的话就是拿到句柄WriteFile啊 在程序的任何位置都一样
flyjincun 2013-07-30
  • 打赏
  • 举报
回复
引用 8 楼 xianglitian 的回复:
[quote=引用 7 楼 flyjincun 的回复:] [quote=引用 5 楼 xianglitian 的回复:] 多线程操作串口? 你同时操作几个串口 如果是一个那也不可能并行啊 串口有不是并口 既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。[/quote]一段一段和一个线程一个线程没关系吧 多线程是为了解决并发 也就是如果你要同时进行应该考虑多线程 你说不用多线程会卡死 我觉得卡死和多线程没关系 而且你现在用多线程不也是卡死么 所以还是你程序结构不合理[/quote] 在问一个问题,子对话框怎么实现用串口发送数据?
flyjincun 2013-07-30
  • 打赏
  • 举报
回复
谢谢大家,我新手一个,要学习的地方还很多
向立天 2013-07-30
  • 打赏
  • 举报
回复
引用 7 楼 flyjincun 的回复:
[quote=引用 5 楼 xianglitian 的回复:] 多线程操作串口? 你同时操作几个串口 如果是一个那也不可能并行啊 串口有不是并口 既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。[/quote]一段一段和一个线程一个线程没关系吧 多线程是为了解决并发 也就是如果你要同时进行应该考虑多线程 你说不用多线程会卡死 我觉得卡死和多线程没关系 而且你现在用多线程不也是卡死么 所以还是你程序结构不合理
flyjincun 2013-07-30
  • 打赏
  • 举报
回复
引用 5 楼 xianglitian 的回复:
多线程操作串口? 你同时操作几个串口 如果是一个那也不可能并行啊 串口有不是并口 既然不能并行那线程一个就够了啊
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
flyjincun 2013-07-30
  • 打赏
  • 举报
回复
引用 2 楼 jason_wentzel 的回复:
1.你线程犯了一个错误,mscomm控件属性界面相关的东西,而你在线程中直接操作界面,这是不安全的,改成在线程中发消息到主界面,由主界面操作mscomm控件。 2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
项目是要求是这样的,要一段一段的调试一个机械臂,先运动一段满足要求停下,然后接着运行下一段。在程序中我加了一个while 循环,要是不用多线程(互斥),会卡死,所以我想一个线程一个线程的运行。
向立天 2013-07-30
  • 打赏
  • 举报
回复
多线程操作串口? 你同时操作几个串口 如果是一个那也不可能并行啊 串口有不是并口 既然不能并行那线程一个就够了啊
贪玩的老鼠 2013-07-30
  • 打赏
  • 举报
回复
串口是独占设备,不用同时读写! 使用 多线程没什么用
ponydph 2013-07-29
  • 打赏
  • 举报
回复
支持楼上。。
孤客天涯 2013-07-29
  • 打赏
  • 举报
回复
1.你线程犯了一个错误,mscomm控件属性界面相关的东西,而你在线程中直接操作界面,这是不安全的,改成在线程中发消息到主界面,由主界面操作mscomm控件。 2.串口通讯据我所知,应该设备是独占式的,不能两个线程同时打开同一个串口吧?如果由主程序打开串口,子线程通过串口句柄同时操作应该没问题。
flyjincun 2013-07-29
  • 打赏
  • 举报
回复
希望大家多多帮忙。。。。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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