code: def wait_for_other_progress_completion(self, progress_other, timeout_ms):
          
          if not isinstance(progress_other, IProgress):
              raise TypeError("progress_other can only be an instance of type IProgress")
          if not isinstance(timeout_ms, baseinteger):
              raise TypeError("timeout_ms can only be an instance of type baseinteger")
          self._call("waitForOtherProgressCompletion",
                       in_p=[progress_other, timeout_ms])
docs: Internal method, not to be called externally.
          
          Waits until the other task is completed (including all sub-operations)
          and forward all changes from the other progress to this progress. This
          means sub-operation number, description, percent and so on.
          
          The caller is responsible for having at least the same count of
          sub-operations in this progress object as there are in the other
          progress object.
          
          If the other progress object supports cancel and this object gets any
          cancel request (when here enabled as well), it will be forwarded to
          the other progress object.
          
          Error information is automatically preserved (by transferring it to
          the current thread's error information). If the caller wants to set it
          as the completion state of this progress it needs to be done separately.
  
          in progress_other of type :class:`IProgress`
  
          in timeout_ms of type int
              Timeout (in ms). Pass 0 for an infinite timeout.
  
          raises :class:`VBoxErrorTimeout`
              Waiting time has expired.