CSerialPort能设置为同步发送吗?

gilbertjuly 2009-08-20 06:08:15
CSerialPort能设置为同步发送吗?
初始化函数如下:
BOOL InitPort(CWnd* pPortOwner,
UINT portnr = 1,
UINT baud = 19200,
char parity = 'N',
UINT databits = 8,
UINT stopbits = 1,
DWORD dwCommEvents = EV_RXCHAR,
UINT writebuffersize = 1024);
如何将它设置为同步发送?
...全文
162 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gilbertjuly 2009-08-24
  • 打赏
  • 举报
回复
这里同步异步的概念是指:
串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。
http://www.vckbase.com/document/viewdoc/?id=1734#%E8%AF%BB%E5%86%99%E4%B8%B2%E5%8F%A3
gilbertjuly 2009-08-24
  • 打赏
  • 举报
回复
由于采用异步发送, 在它的那个线程里面, 只发送一次.
就是说:
m_ser.WriteToPort(chSend);
这句话执行好之后并不是马上发送串口数据
要等进入它的线程之后再发送.
你可以跟踪下是什么时候进入它的线程的.
三句writetoport都会进入这个线程
但是只能执行一个,最后一个.
雪影 2009-08-24
  • 打赏
  • 举报
回复
明白就好,串口本来就不支持异步操作。

所以只能等前一个数据发送完毕之后才能发送下一个数据

接分
gilbertjuly 2009-08-24
  • 打赏
  • 举报
回复
我终于明白了,这个类没有办法同步发送数据,看它的cpp文件中的初始化:
m_hComm = CreateFile(szPort,// communication port string (COMX)
GENERIC_READ | GENERIC_WRITE, // read/write types
0, // comm devices must be opened with exclusive access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // Async I/O
0); // template must be 0 for comm devices
FILE_FLAG_OVERLAPPED被设置为异步,并且不能改为同步,要同步的话用其他类吧,比如:
http://blog.chinaunix.net/u/32550/showart_365425.html
Conry 2009-08-20
  • 打赏
  • 举报
回复
如果同步就没有必要用CSerialPort,write完成就read等待,如此循环就可以了
zoulie 2009-08-20
  • 打赏
  • 举报
回复
没用过CSerialPort,只用过API,看下里面设置打开串口的方式的代码
HANDLE CreateFile( LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);

lpFileName:将要打开的串口逻辑名,如“COM1”;
dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;
dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;
lpSecurityAttributes:引用安全性属性结构,缺省值为NULL;
dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING;
dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操作;
hTemplateFile:对串口而言该参数必须置为NULL;

16,548

社区成员

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

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

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