win32串口读写多线程同步

在Win32下进行串口的操作时,会用到CreateFile、ReadFile、Writefile等几个函数,其中涉及串口的同步模式和异步模式,

在单线程时使用同步模式和异步模式没有太大的关系,都可以很好的使用。但是在多线程中进行读写就需要考虑串口资源的

同步问题了,以为windows下串口资源同时只能被一个线程占用,读写同时进行会导致程序锁死,因此可以使用信号量进行同步控制。

例如,封装之后的串口操作函数为:UartOpen、UartSend、UartRecv、UartClose

串口接收为一个单独的线程,接收到数据之后进行处理

那么在调用UartSend 和 UartRecv 前后要进行同步

CRITICAL_SECTION UART_mutex;

InitializeCriticalSection(&UART_mutex);

 EnterCriticalSection(&UART_mutex);

 LeaveCriticalSection(&UART_mutex);

DeleteCriticalSection(&UART_mutex);

 

串口接收

while(((CANPort*)port)->used)
 {
      EnterUART();     //printf("recvive wait\n");

     res = Receive();

     LeaveUART();   //printf("recvive leave \n"); 

 }

 

串口发送:

  EnterUART();      //printf("send wait\n");

  res = canSend();

  LeaveUART();   //printf("send leave\n");

 

你可能感兴趣的:(win32串口读写多线程同步)