Closed MauricioTRS closed 8 years ago
Olá @MauricioTRS , teria como enviar um pequeno exemplo para reproduzir o problema? Essas duas chamadas que você citou estão funcionando aparentemente bem.
Segue a classe que manipula o servidor.
Estou chamando primeiro o método Finalizar
da classe MinhaThread
e depois executando o MinhaThread.Dispose()
;
unit uMinhaThread;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,BrookApplication, BrookAction;
type
MyThread = class(TThread)
protected
procedure Execute; override;
public
Constructor Create(CreateSuspended : boolean);
procedure Finalizar();
end;
MyAction = class(TBrookAction)
public
procedure Get; override;
end;
implementation
{ MyThread }
procedure MyThread.Execute;
begin
BrookApp.Run;
end;
constructor MyThread.Create(CreateSuspended: boolean);
begin
FreeOnTerminate := True;
inherited Create(CreateSuspended);
end;
procedure MyThread.Finalizar;
begin
BrookApp.Terminate();
end;
{ MyAction }
procedure MyAction.Get;
begin
Write('Hello World!');
end;
end.
Este código está bastante confuso, impossível entender o que ele deveria fazer. Mas acho que entendi o que você quer criar, seria um form principal com dois botões Start/Stop para ligar/desligar o server? Se sim, um usuário solicitou algo assim na Lazarus-BR: https://groups.google.com/d/msg/lazarus-br/n7ShZqfFEwU/De8J0TsExSMJ. Caso o link do exemplo esteja quebrado você pode usar este aqui: https://app.box.com/s/2snum2w1er4u5bolfhvb5lt7be14gghp. Dê um retorno se era isso mesmo que você queria. :-)
PERFEITO!
Era exatamente isso que eu precisava. Acredito que meu problema estava mesmo ao manipular a Thread.
Muito obrigado!
Estou tentando implementar uma API JSON e preciso que o servidor HTTP seja ativado e desativado pelo usuário, com um botão de liga e desliga mesmo.
Criei uma Thread separada para manipular o servidor HTTP e ao iniciar o serviço e para-lo pela primeira vez, tudo ocorre bem. Porém ao tentar iniciar pela segunda vez, ele não é ativo.
Estou chamando os seguintes métodos:
Iniciar:
BrookApp.Run();
Parar;
BrookApp.Terminate();