Jump to content

dexter

Members
  • Content Count

    5
  • Joined

  • Last visited

Posts posted by dexter


  1. Hi,

     

    I have updated the destructor but it did not help:

     

          FKeepAlive.Stop;
          while integer(PeekMessage(Msg, 0, 0, 0, PM_REMOVE)) <> 0 do
          begin
            TranslateMessage(Msg);
            DispatchMessage(Msg);
          end;
          FKeepAlive.Terminate(5000);

     

    And it fails during call to Terminate(5000) after about 1 second.

     


  2. Hi Eddy,

     

    the problem is not in FConn. I have removed the call to FConn.SendStr('') from TimedTask execution, and the problem persists.

    And exception is raised during FKeepAlive.Terminate, FKeepAlive.WaitFor does not help.

    See attached the call stack to exception.

    Annotation 2020-07-02 094725.png


  3. Hi,

     

    The full destructor code is:

    destructor TjBASEComm.Destroy;
    begin
      if Assigned(FKeepAlive) then
        try
          FKeepAlive.Stop;
          FKeepAlive.Terminate(5000); // <-- here error is raised
        except
        end;
    
      try
        FConn.Free;
      except
      end;
    
      inherited;
    end;

    As you can see - connection is freed after.

    Can it be because application is a console app?

     


  4. Hi,

     

    In a console application I have defined a timed task, which sends an empty string once per minute to keep alive a connection:

     

      FKeepAlive := Parallel.TimedTask.Every(60 * 1000).Execute(
        procedure()
        begin
          FConn.SendStr(''); // will send just ENTER each minute
        end
        );

    When the application is closing - I'm trying to stop the task with following code:

     

          FKeepAlive.Stop;
          FKeepAlive.Terminate(5000); // <-- here error is raised

    And I'm getting System Error: Invalid window handle

     

    How is the proper way to stop a timed task?

     

×