En/na Luca Olivetti ha escrit:

OTOH my real program, even if cross-compiled (what a pain!), is still throwing an exception if I use ctrl-z, is still having problems with fork but at least (if I leave it in the foreground) I can use ctrl+c.

This is another test program that shows my problem with fork: as soon as I start the thread, the main program stops working (the thread *is* running, you can put a writeln in its loop to show it). Note that in this short example I don't close stdin,stdout,stderr, I don't block signals but it doesn't matter (I did it all and the result is the same).
The same happens with the native compiler and the cross compiler.

Now, if I remove the fork part, both the thread and the main loop work, but if I use crtl-z and then fg after the thread has started it will give an EAccessViolation, but this only with the native compiler (remind that the native compiler is 2.1.3 while the cross compiler is 2.0.4).

---------8<--------8<-------8<--------8<----------
program test2;
{$mode objfpc}{$H+}

uses cthreads,sysutils,classes,baseunix;

type
  tmt=class(TThread)
    procedure execute;override;
  end;

var
  mt:tmt;
  t:TPid;
  i:integer;

procedure tmt.execute;
begin
  while not terminated do sleep(1000);
end;

begin
  t:=FpFork;
  if t<0 then
  begin
    writeln('fork failed');
    halt(t);
  end;
  if t>0 then Halt(0); //parent
  while true do
  begin
    i:=i+1;
    writeln('running ',i);
    sleep(1000);
    if i=5 then mt:=tmt.create(false);
  end;
end.
---------8<--------8<-------8<--------8<----------

Bye
--
Luca
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to