📄 modem资料整理.txt
字号:
Modem串口程序设计可以分为三种方式:
1.利用MSCOMM控件编程;
2.利用WINAPI函数进行程序设计(利用消息机制?)
3.利用多线程
如果存在不同线程要对共同的资源进行访问,要注意不同线程之间的同步,并建议采用异步方式进行访问(原因参考:WinXP与WinCE串口的运行机制之比较)。
利用多线程程序设计可能需要用到的函数:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset, //TRUE表示创建手动事件句柄,该句柄需用ResetEvent函数设为无信号状态,
//否则创建一个自动设定事件句柄,当作为等待线程的参数时,会随等待线程的释放而自动设为无信号状态。
BOOL bInitialState,//该参数为TRUE,表示句柄创建时的初试态即为有信号的,否则为无信号的
LPCTSTR lpName
);
使用举例:
HANDLE hEvent = CreateEvent(NULL, FALSE, TRUE, NULL);
if (hEvent == NULL) return;
.........
BOOL SetEvent(
HANDLE hEvent //同步的事件的句柄。
);//该函数的作用是将用于同步的事件的句柄设为有信号的,即表示共享资源正在被使用。
ResetEvent(
HANDLE hEvent //同步的事件的句柄。
);//将同步事件的句柄重置成无信号的事件。
关键节(Critical Seciton),可以防止共享资源被同时访问,它一次只能被一个线程使用,可用于互斥体对象。使用举例:
CRITICAL_SECTION m_csCommunicationSync;
VOID InitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection //指向关键结的指针
);//初试化关键节,关键节在使用前必须被初试化。
使用举例:
InitializeCriticalSection(&m_csCommunicationSync);
/*用于申请关键节的所有权,保证从此时至LeaveCriticalSection之间的关键的代码不会被别的线程中断,如果在调用EnterCriticalSection时关键节对象已被另一个线程拥有,那么该函数将无限期等待所有权。
*/
VOID EnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection //指向关键节的指针
);
使用举例:
EnterCriticalSection(&m_csCommunicationSync);
VOID LeaveCriticalSection(
LPCRITICAL_SECTION lpCriticalSection //指向关键节的指针
);//离开关键节
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
利用多线程编程设计的步骤:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -