WaitCommEvent要设成一个循环。给你个例子:DWORD FAR PASCAL CommWatchProc( LPSTR lpData )
{
DWORD dwEvtMask ;
NPTTYINFO npTTYInfo = (NPTTYINFO) lpData ;
OVERLAPPED os ;
int nLength ;
BYTE abIn[ MAXBLOCK + 1] ; memset( &os, 0, sizeof( OVERLAPPED ) ) ; // create I/O event used for overlapped read os.hEvent = CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if (os.hEvent == NULL)
{
MessageBox( NULL, "Failed to create event for thread!", "TTY Error!",
MB_ICONEXCLAMATION | MB_OK ) ;
return ( FALSE ) ;
} if (!SetCommMask( COMDEV( npTTYInfo ), EV_RXCHAR ))
return ( FALSE ) ; while ( CONNECTED( npTTYInfo ) )
{
dwEvtMask = 0 ; WaitCommEvent( COMDEV( npTTYInfo ), &dwEvtMask, NULL ); if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)
{
do
{
if (nLength = ReadCommBlock( hTTYWnd, (LPSTR) abIn, MAXBLOCK ))
{
WriteTTYBlock( hTTYWnd, (LPSTR) abIn, nLength ) ; // force a paint UpdateWindow( hTTYWnd ) ;
}
}
while ( nLength > 0 ) ;
}
} // get rid of event handle CloseHandle( os.hEvent ) ; // clear information in structure (kind of a "we're done flag") THREADID( npTTYInfo ) = 0 ;
HTHREAD( npTTYInfo ) = NULL ; return( TRUE ) ;} // end of CommWatchProc()
{
DWORD dwEvtMask ;
NPTTYINFO npTTYInfo = (NPTTYINFO) lpData ;
OVERLAPPED os ;
int nLength ;
BYTE abIn[ MAXBLOCK + 1] ; memset( &os, 0, sizeof( OVERLAPPED ) ) ; // create I/O event used for overlapped read os.hEvent = CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if (os.hEvent == NULL)
{
MessageBox( NULL, "Failed to create event for thread!", "TTY Error!",
MB_ICONEXCLAMATION | MB_OK ) ;
return ( FALSE ) ;
} if (!SetCommMask( COMDEV( npTTYInfo ), EV_RXCHAR ))
return ( FALSE ) ; while ( CONNECTED( npTTYInfo ) )
{
dwEvtMask = 0 ; WaitCommEvent( COMDEV( npTTYInfo ), &dwEvtMask, NULL ); if ((dwEvtMask & EV_RXCHAR) == EV_RXCHAR)
{
do
{
if (nLength = ReadCommBlock( hTTYWnd, (LPSTR) abIn, MAXBLOCK ))
{
WriteTTYBlock( hTTYWnd, (LPSTR) abIn, nLength ) ; // force a paint UpdateWindow( hTTYWnd ) ;
}
}
while ( nLength > 0 ) ;
}
} // get rid of event handle CloseHandle( os.hEvent ) ; // clear information in structure (kind of a "we're done flag") THREADID( npTTYInfo ) = 0 ;
HTHREAD( npTTYInfo ) = NULL ; return( TRUE ) ;} // end of CommWatchProc()
解决方案 »
- 2011新年散分 升星散分。。。
- 请教 Image控件可以用来实时刷新24位真彩色的BMP图片吗
- 用SDK方式如何为窗口边框着色?
- 请教有关网格的问题??
- 请问如何学习VC++的调试功能和技术,有那些书?
- vs2005 debug 调试问题
- 线程问题?
- 在当前系统下打包mfc程序,应该包含那个版本mfc*.dll和msvcrt.dll,为什么我的程序用depends查看发现没有使用mfc呀?
- 如何将BSTR字符串转化为unsigned char字符数组如何将BSTR字符串转化为unsigned char字符数组
- 如何实时获取系统某一进程的运行状态发
- 请教两个菜问题。
- 双精度的double的格式化%是什么?(在线等待,马上给分)
{
HANDLE idComDev ;
BYTE bPort, abScreen[ MAXROWS * MAXCOLS ] ;
BOOL fConnected, fXonXoff, fLocalEcho, fNewLine, fAutoWrap,
fUseCNReceive, fDisplayErrors;
BYTE bByteSize, bFlowCtrl, bParity, bStopBits ;
DWORD dwBaudRate ;
WORD wCursorState ;
HFONT hTTYFont ;
LOGFONT lfTTYFont ;
DWORD rgbFGColor ;
int xSize, ySize, xScroll, yScroll, xOffset, yOffset,
nColumn, nRow, xChar, yChar ;
HANDLE hPostEvent, hWatchThread, hWatchEvent ;
HWND hTermWnd ;
DWORD dwThreadID ;
OVERLAPPED osWrite, osRead ;} TTYINFO, NEAR *NPTTYINFO ;// macros ( for easier readability )#define GETHINST( x ) ((HINSTANCE) GetWindowLong( x, GWL_HINSTANCE ))
#define GETNPTTYINFO( x ) ((NPTTYINFO) GetWindowLong( x, GWL_NPTTYINFO ))
#define SETNPTTYINFO( x, y ) SetWindowLong( x, GWL_NPTTYINFO, (LONG) y )#define COMDEV( x ) (x -> idComDev)
#define PORT( x ) (x -> bPort)
#define SCREEN( x ) (x -> abScreen)
#define CONNECTED( x ) (x -> fConnected)
#define XONXOFF( x ) (x -> fXonXoff)
#define LOCALECHO( x ) (x -> fLocalEcho)
#define NEWLINE( x ) (x -> fNewLine)
#define AUTOWRAP( x ) (x -> fAutoWrap)
#define BYTESIZE( x ) (x -> bByteSize)
#define FLOWCTRL( x ) (x -> bFlowCtrl)
#define PARITY( x ) (x -> bParity)
#define STOPBITS( x ) (x -> bStopBits)
#define BAUDRATE( x ) (x -> dwBaudRate)
#define CURSORSTATE( x ) (x -> wCursorState)
#define HTTYFONT( x ) (x -> hTTYFont)
#define LFTTYFONT( x ) (x -> lfTTYFont)
#define FGCOLOR( x ) (x -> rgbFGColor)
#define XSIZE( x ) (x -> xSize)
#define YSIZE( x ) (x -> ySize)
#define XSCROLL( x ) (x -> xScroll)
#define YSCROLL( x ) (x -> yScroll)
#define XOFFSET( x ) (x -> xOffset)
#define YOFFSET( x ) (x -> yOffset)
#define COLUMN( x ) (x -> nColumn)
#define ROW( x ) (x -> nRow)
#define XCHAR( x ) (x -> xChar)
#define YCHAR( x ) (x -> yChar )
#define USECNRECEIVE( x ) (x -> fUseCNReceive)
#define DISPLAYERRORS( x ) (x -> fDisplayErrors)#define POSTEVENT( x ) (x -> hPostEvent)
#define TERMWND( x ) (x -> hTermWnd)
#define HTHREAD( x ) (x -> hWatchThread)
#define THREADID( x ) (x -> dwThreadID)
#define WRITE_OS( x ) (x -> osWrite)
#define READ_OS( x ) (x -> osRead)#define SET_PROP( x, y, z ) SetProp( x, MAKEINTATOM( y ), z )
#define GET_PROP( x, y ) GetProp( x, MAKEINTATOM( y ) )
#define REMOVE_PROP( x, y ) RemoveProp( x, MAKEINTATOM( y ) )