Forum > Portuguese

Cancelar a aplicação Lazarus com CTLR+C

(1/1)

automacaosamos:
Bom dia fiz o código abaixo  usando o Simple Program

ele funciona perfeitamente mas quando tento encerrar com o CTRL + C

ele da a mensagem: Project raised exception class 'External: SIGINT'. At address 7703B095

o que poderia ser ??

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program apisamos; {$mode objfpc}{$H+} uses  {$IFDEF UNIX}{$IFDEF UseCThreads}  cthreads,  {$ENDIF}{$ENDIF}  SysUtils,  Classes,  fphttpapp,  httpdefs,  httproute,  fpjson,  jsonparser; procedure jsonResponse(var res: TResponse; data: String);begin  res.Content       := data;  res.Code          := 200;  res.ContentType   := 'application/json';  res.ContentLength := length(res.Content);  res.SendContent;end; procedure timeEndpoint(req: TRequest; res: TResponse);var  jObject : TJSONObject;begin  jObject := TJSONObject.Create;  try    jObject.Strings['time'] := 'Servidor OK ' + TimeToStr(Time) + req.URI;    jsonResponse(res, jObject.AsJSON);  finally    jObject.Free;  end;end; procedure apiEndpoint(req: TRequest; res: TResponse);var  JSONObject            : TJSONObject;  Rota                  : String;  Metodo                : String;  Uri                   : String;begin  req.RouteParams[''];  Metodo        := req.Method;  Rota          := req.RouteParams['name'];  Uri           := req.URI;  JSONObject    := TJSONObject.Create;  JSONObject    := TJSONObject(GetJSON('{"teste":"ok"}'));  JSONResponse(res, JSONObject.AsJSON); end; begin  Application.Port     := 8080;  HTTPRouter.RegisterRoute('/time'     , @timeEndpoint, true);  HTTPRouter.RegisterRoute('/api/:name', @apiEndpoint);  Application.Threaded := true;  writeln('Servidor Rodando: http://localhost:' + IntToStr(Application.Port) + '/time');  Application.Initialize;  Application.Run;end.                                             

Gustavo 'Gus' Carreno:
Oies,

Por defeito os sinais não têm uma rotina que faça com que a mensagem desse sinal seja mais humana.

Pelo facto de que estamos a falar da linguagem Object Pascal, qualquer erro normalmente é transmitido como uma Exceção.

Neste caso, quando se tenta encerrar o programa com CTRL+C, o que é enviado para a aplicação é o sinal SIGINT ou Interrupt Signal.

A maneira que a linguagem tem de anunciar que detetou o envio do sinal SIGINT é pelo mecanismo de exceções, e é isso mesmo que encontrou.

Espero que faça sentido... Após uma porrada de anos no Reino Unido, o cérebro começa a pensar mais em Inglês que em Tuga e, por incrivel que pareça, custou-me bastante articular isto em Português, mais do que eu gostaria de admitir, LOL!!

Grande abraço,
Gus

Navigation

[0] Message Index

Go to full version