|
通过支持AT指令集的手机发送短消息(源代码)(5) m_phSMPHaveData = new HANDLE[dwNum]; m_phSMPIDLE = new HANDLE[dwNum]; for( DWORD dw = 0; dw < dwNum; dw ++ ) { m_phSMPHaveData[dw] = m_pSMPool[dw].hSMPHaveData = CreateEvent( NULL,FALSE,FALSE,NULL ); m_phSMPIDLE[dw] = m_pSMPool[dw].hSMPIDLE = CreateEvent( NULL,FALSE,TRUE,NULL ); } } catch( ... ) { return( false ); } return( true ); } bool CGSMPhone::FreeShortMsgPool() { try { for( DWORD dwCount = 0; dwCount < m_dwSMContentPoolNum; dwCount ++ ) { CloseHandle( m_pSMPool[dwCount].hSMPHaveData ); m_pSMPool[dwCount].hSMPHaveData = NULL; CloseHandle( m_pSMPool[dwCount].hSMPIDLE ); m_pSMPool[dwCount].hSMPIDLE = NULL; } delete [] m_phSMPHaveData; m_phSMPHaveData = NULL; delete [] m_phSMPIDLE; m_phSMPIDLE = NULL; delete [] m_pSMPool; m_pSMPool = NULL; } catch( ... ) { return( false ); } return( true ); } bool CGSMPhone::WriteComm(const char *buffer, DWORD size) { if( m_bOpened == FALSE ) return( false ); DWORD dwBytesSent = 0; BOOL bResult = TRUE; EnterCriticalSection( &m_csComm ); bResult = WriteFile( m_hIDComDev, buffer, size, &dwBytesSent, &m_Overlapped ); LeaveCriticalSection( &m_csComm ); if( !bResult ) { if( ( GetLastError() == ERROR_IO_PENDING ) ) { if( WaitForSingleObject( m_Overlapped.hEvent, 1000 ) == WAIT_OBJECT_0 ) { GetOverlappedResult( m_hIDComDev, &m_Overlapped, &dwBytesSent, FALSE ); if( dwBytesSent == size ) { Sleep( 100 );
|