Description This function instructs the master script to wait a designated amount of time for the active remote instances to become idle before the master script continues execution. The wait time is the maximum time the master script will wait. If the wait time is reached before all of the active remote instances are idle, the master script continues execution regardless. If all of the remote instances become idle before the wait time is reached, the master script will resume execution as soon as all remote instances are idle. The IPCWaitForIdle command can be useful in circumstances where the master script must make sure that the remote instances have completed some task(s) before the master script can continue. Some IPC commands, such as IPCExecEmbeddedScript, contain a "wait" argument in their own function calls, which is equivalent to using IPCWaitForIdle.
Note that it may be more convenient to issue a single IPCWaitForIdle command after issuing several other commands that are sequentially added to each of the remote instances' command queues. This allows the commands to execute in their queued order without waiting between commands.
Syntax count = IPCWaitForIdle( connections(), maxWait )
Parameters count (Long) Returned number of remote nodes that were reported to be busy when the IPCWaitForIdle command finishes. A return of 0 indicates that all remotes are idle.
connections() As T_IPCINSTANCE An array of T_IPCINSTANCE structures, with each structure defining the connection information for a remote node.
maxWait As String This argument indicates the maximum time that the master script will wait for the remote instances to become idle. If the remote instances all become idle before this maxWait time, the master script will automatically continue. Time units may be indicated using the following conventions: s=seconds, m=minutes, h=hours, d=days, w=weeks, mo=months (ex. "10s" = 10 seconds). In the absence of a time unit designation, seconds will be assumed.
Example The example below demonstrates how to to load the connections() array with remote node connection information stored in a configuration file and then go through a series of connect, query and reconnect commands before finally terminating the remote FRED instances.
Sub Main
EnableTextPrinting(True) ClearOutputWindow()
'Use a CSV file to populate the connections array Dim nRemoteLoad As Long Dim connections() As T_IPCINSTANCE Dim configFile As String, configLocation As String configLocation = GetDocDir() & "\" configFile = "DCTestBed_Connections.csv" nRemoteLoad = IPCLoadConfigFile( connections(), configLocation & configFile )
'Connect to the remotes Dim nConnect As Long nConnect = IPCConnect( connections() )
'Wait for UP TO two minutes for the remotes to become idle Dim nWait As Long nWait = IPCWaitForIdle( connections(), "2m" )
'Query the status of the connections Dim nQuery As Long nQuery = IPCQueryStatus( connections(), "detail" )
'Disconnect from the remote nodes and save a snapshot file of the connections array Dim nDisconnect As Long Dim snapShot As String snapShot = configLocation & "DCTestBed_Reconnect.csv" nDisconnect = IPCDisconnect( connections(), snapShot )
'Now reconnect Dim nReconnect As Long nReconnect = IPCReconnect( connections(), snapShot )
'Query the status again nQuery = IPCQueryStatus( connections(), "detail" )
'Terminate the connections Dim nTerminate As Long nTerminate = IPCTerminate( connections(), "sterilize", "1d" )
End Sub
The IPC commands generally report information to the output window that may be used as diagnostics. For the example script shown above, the following output is reported: [MASTER]IPCLoadConfigFile: 3 of 3 connections read from 'C:\temp\DCTestBed_Connections.csv'
index active speed host status 1 true 100 computer1 --- 2 true 100 computer2 --- 3 true 100 computer3 ---
[MASTER]IPCConnect: 3 of 3 Remote FRED instances connected and running
index host result message 1 computer1 connected --- 2 computer2 connected --- 3 computer3 connected ---
[MASTER]IPCWaitForIdle: 3 of 3 active connections are idle (0 sec)
[MASTER]IPCQueryStatus: 3 connections queried
index host message 1 computer1 idle 2 computer2 idle 3 computer3 idle
index host handle cmd handle message 1 NI_00000012 HPOL check PING IDLE idle 2 NI_00000013 HPOL check PING IDLE idle 3 NI_00000014 HPOL check PING IDLE idle
[MASTER]IPCDisconnect: 3 of 3 Remote FRED instances disconnected but still running
[MASTER]IPCReconnect: 3 of 3 Remote FRED instances reconnected
index host message 1 computer1 reconnected - idle 2 computer2 reconnected - idle 3 computer31 reconnected - idle
[MASTER]IPCQueryStatus: 3 connections queried
index host message 1 computer1 idle 2 computer2 idle 3 computer3 idle
index host handle cmd handle message 1 NI_00000015 HPOL check PING IDLE idle 2 NI_00000016 HPOL check PING IDLE idle 3 NI_00000017 HPOL check PING IDLE idle
[MASTER]IPCTerminate: 3 of 3 Remote FRED instance terminations initiated
index host message 1 computer1 terminate - initiated 2 computer2 terminate - initiated 3 computer3 terminate - initiated
See Also Distributed Computing Script Commands
|