ExecUntilTimeOut

 (Available in 01 TS COM - TS_COM_ServerInfo)

Source

METHOD ExecUntilTimeOut( oDispatch AS OBJECT, dwTimeOutMax AS DWORD ) AS LOGIC PASCAL  ; ...
...CLASS TS_ServerInfo
LOCAL oSuperGlobalData AS _TS_SuperGlobalData
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL dwTimeOutCur AS DWORD
LOCAL struWinMSG IS _winMSG
LOCAL lMessage AS LOGIC
LOCAL lTimeOut AS LOGIC
LOCAL uError AS USUAL
   TSTrace Enter
   IF SELF:IsValidObject
      oCOMGlobalData:=SELF:_COMGlobalData
      oSuperGlobalData:=SELF:_SuperGlobalData
      lTimeOut:=FALSE
      InterlockedIncrement( oCOMGlobalData:_ServerInfoInMessageLoop )
      IF !oCOMGlobalData:_ServerInfoQuit
         IF oCOMGlobalData:_ServerInfoNeedsCoResumeClassObjects
            oCOMGlobalData:_ServerInfoNeedsCoResumeClassObjects:=FALSE
            IF TS_HFailed( TS_CoResumeClassObjects( ), TRUE )
               oCOMGlobalData:_ServerInfoQuit:=TRUE
            END
         END
         InterlockedDecrement( oCOMGlobalData:_ServerInfoUseCounter )
         IF LONGINT( oCOMGlobalData:_ServerInfoUseCounter )<0L
            TSTrace Warning "LONGINT(oCOMGlobalData:_ServerInfoUseCounter)<0L"
         END
         #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
            LeaveCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection  ; ...
           ... )
         #ENDIF
         TSTrace ErrHandler EC_BREAK
         BEGIN SEQUENCE
            dwTimeOutCur:=dwTimeOutMax+5U
            WHILE !oCOMGlobalData:_ServerInfoQuit .AND. !lTimeOut
               IF LOGIC( _CAST, dwTimeOutMax )
                  lMessage:=PeekMessage( @struWinMSG, NULL_PTR, 0U, 0U, PM_REMOVE  ; ...
                 ... )
               ELSE
                  lMessage:=GetMessage( @struWinMSG, NULL_PTR, 0U, 0U )
               END
               DO CASE
               CASE lMessage
                  TranslateMessage( @struWinMSG )
                  DO CASE
                  CASE LOGIC( _CAST, oDispatch )
                     oDispatch:Dispatch( SELF, @struWinMSG )
                     IF struWinMSG.message==WM_QUIT
                        oCOMGlobalData:_ServerInfoQuit:=TRUE
                     ELSE
                        dwTimeOutCur:=dwTimeOutMax+5U
                     END
                  CASE struWinMSG.message==WM_QUIT
                     DispatchMessage( @struWinMSG )
                     oCOMGlobalData:_ServerInfoQuit:=TRUE
                  OTHERWISE
                     DispatchMessage( @struWinMSG )
                     dwTimeOutCur:=dwTimeOutMax+5U
                  END
               CASE LOGIC( _CAST, dwTimeOutCur )
                  dwTimeOutCur-=1U
               END
               IF !oCOMGlobalData:_ServerInfoQuit .AND. LOGIC( _CAST, dwTimeOutMax  ; ...
              ... )
                  IF LOGIC( _CAST, dwTimeOutCur )
                     IF dwTimeOutCur<dwTimeOutMax
                        #IFDEF TS_TRACETIMED_ENABLE
//                         _DebOut32(String2Psz("<(CollectForced[ExecUntilTimeOut]("+ExecName(FALSE)+"))>")) ; ...
                           CollectForced( )
                        #ENDIF
                        Sleep( 1U )
                     END
                  ELSE
                     lTimeOut:=TRUE
                  END
               END
            END
            #IFNDEF TS_CAVO2611
               IF SetMaxDynSize( 0U )>oSuperGlobalData:_MaxDynSizeNew
                  oSuperGlobalData:_MaxDynSizeNew:=SetMaxDynSize( 0U )
                  oSuperGlobalData:_MaxDynSizeSet:=TRUE
//                TSTrace ShwEx SetMaxDynSize(0U)
               END
            #ENDIF
            TSTrace ErrHandler Restore
         RECOVER USING uError
            TSTrace ErrHandler Restore
            TSTrace Warning uError
         END SEQUENCE
         #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
            EnterCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection  ; ...
           ... )
         #ENDIF
         InterlockedIncrement( oCOMGlobalData:_ServerInfoUseCounter )
      END
      InterlockedDecrement( oCOMGlobalData:_ServerInfoInMessageLoop )
      IF LONGINT( oCOMGlobalData:_ServerInfoInMessageLoop )<0L
         TSTrace Warning "LONGINT(oCOMGlobalData:_ServerInfoInMessageLoop)<0L"
      END
      oSuperGlobalData:=NULL_OBJECT
      oCOMGlobalData:=NULL_OBJECT
   ELSE
      TSTrace Warning "!SELF:IsValidObject"
   END
   TSTrace Leave
RETURN lTimeOut