This method is used to wait a specified amount of time for received messages from the neoVI hardware.
int _stdcall icsneoWaitForRxMessagesWithTimeOut(void* hObject,unsignedint iTimeOut);
Public Declare Function icsneoWaitForRxMessagesWithTimeOut Lib “icsneo40.dll” (ByVal hObject As IntPtr, ByVal iTimeOut As UInt32) As Int32
[DllImport(“icsneo40.dll”)] public static extern Int32 icsneoWaitForRxMessagesWithTimeOut(IntPtr hObject, UInt32 iTimeOut);
Parameters
hObject
[in] Specifies the driver object created by OpenNeoDevice.
iTimeOut
[in] Specifies the amount of time in milliseconds that the function will wait for a received message before returning.
Return Values
0 if no message was received during the wait period. 1 if a message was received. -1 will be returned if there is an error condition. GetLastAPIError must be called to obtain the specific error. The errors that can be generated by this function are:
NEOVI_ERROR_DLL_NEOVI_NO_RESPONSE = 75
Remarks
This function allows an application to avoid ‘polling’ for received messages. It will return as soon as a message is received or when the timeout specified has been reached.
Examples
void* hObject =0; // holds a handle to the neoVI objecticsSpyMessage stMessages[19999]; // holds the received messagesint iResult;int iNumberOfErrors;int iNumberOfMessages;unsignedint iTimeOut =5; //millisecondsbool bDone =false;while(!bDone){ iResult =icsneoWaitForRxMessagesWithTimeOut(hObject, iTimeOut);if(iResult ==0)continue; //no messages received iResult =icsneoGetMessages(hObject,stMessages,&iNumberOfMessages,&iNumberOfErrors);if(iResult ==0)MessageBox(hWnd,TEXT("Problem Reading Messages"),TEXT("neoVI Example"),0);elseMessageBox(hWnd,TEXT("Messages Read Successfully"),TEXT("neoVI Example"),0);}return0;
Private m_hObject As IntPtr '// Declared at form level and previously open with a call to OpenNeoDevice
Dim iResult As Integer
Dim iTimeOut As UInt32
iTimeOut = Convert.ToUInt32(5000)
lblWaitForRxMessageWithTimeOutResult.Text = "Status"
Application.DoEvents()
'//This function will block until, A: A Message is received by the hardware, or B: the timeout is reached
iResult = icsneoWaitForRxMessagesWithTimeOut(m_hObject, iTimeOut)
If iResult = 1 Then
'Message received before timeout
lblWaitForRxMessageWithTimeOutResult.Text = "Message received"
Call cmdReceive_Click(sender, e)
'//Do something with the messages received
Else
'Timeout reached and no messages received
lblWaitForRxMessageWithTimeOutResult.Text = "Message Not received"
'//Take action if no messages were received
End If
//Declared at form level and previously open with a call to OpenNeoDeviceIntPtr m_hObject; //handle for deviceint iResult;UInt32 iTimeOut =5000; //Set timeout to 5 secondslblWaitForRxMessageWithTimeOutResult.Text="Status";Application.DoEvents();//This function will block until, A: A Message is received by the hardware, or B: the timeout is reachediResult =icsNeoDll.icsneoWaitForRxMessagesWithTimeOut(m_hObject, iTimeOut);if (iResult ==1){ //Message received before timeoutlblWaitForRxMessageWithTimeOutResult.Text="Message received"; //Do something with the messages receivedcmdReceive_Click(sender, e);}else{ //Timeout reached and no messages receivedlblWaitForRxMessageWithTimeOutResult.Text="Message Not received"; //Take action if no messages were received}