From 61c802d7c05bc6bfa56515522bf236f07c41c34c Mon Sep 17 00:00:00 2001 From: Wizzup? Date: Tue, 3 Nov 2009 20:14:30 +0000 Subject: [PATCH] forking example. git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@185 3f818213-9676-44b0-a9b4-5e4c4e03d09d --- Projects/SAMufasaGUI/project1.lpi | 176 ++++----------------------- Projects/forking/project1.lpi | 194 ++++++++++++++++++++++++++++++ Projects/forking/project1.lpr | 117 ++++++++++++++++++ 3 files changed, 336 insertions(+), 151 deletions(-) create mode 100644 Projects/forking/project1.lpi create mode 100644 Projects/forking/project1.lpr diff --git a/Projects/SAMufasaGUI/project1.lpi b/Projects/SAMufasaGUI/project1.lpi index efb6d70..25b6510 100644 --- a/Projects/SAMufasaGUI/project1.lpi +++ b/Projects/SAMufasaGUI/project1.lpi @@ -7,7 +7,7 @@ <UseXPManifest Value="True"/> - <ActiveEditorIndexAtStart Value="24"/> + <ActiveEditorIndexAtStart Value="13"/> </General> <VersionInfo> <ProjectVersion Value=""/> @@ -227,7 +227,7 @@ <UnitName Value="Client"/> <CursorPos X="26" Y="44"/> <TopLine Value="26"/> - <EditorIndex Value="18"/> + <EditorIndex Value="7"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit26> @@ -260,7 +260,7 @@ <UnitName Value="Window"/> <CursorPos X="39" Y="312"/> <TopLine Value="306"/> - <EditorIndex Value="13"/> + <EditorIndex Value="2"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit30> @@ -276,7 +276,7 @@ <UnitName Value="windowutil"/> <CursorPos X="29" Y="29"/> <TopLine Value="24"/> - <EditorIndex Value="14"/> + <EditorIndex Value="3"/> <UsageCount Value="35"/> <Loaded Value="True"/> </Unit32> @@ -285,7 +285,7 @@ <UnitName Value="Input"/> <CursorPos X="19" Y="229"/> <TopLine Value="225"/> - <EditorIndex Value="21"/> + <EditorIndex Value="10"/> <UsageCount Value="59"/> <Loaded Value="True"/> </Unit33> @@ -295,7 +295,7 @@ <UnitName Value="finder"/> <CursorPos X="50" Y="19"/> <TopLine Value="19"/> - <EditorIndex Value="19"/> + <EditorIndex Value="8"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit34> @@ -319,8 +319,8 @@ <IsPartOfProject Value="True"/> <UnitName Value="mmlpsthread"/> <CursorPos X="29" Y="349"/> - <TopLine Value="308"/> - <EditorIndex Value="15"/> + <TopLine Value="318"/> + <EditorIndex Value="4"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit37> @@ -383,15 +383,13 @@ <UnitName Value="SynEdit"/> <CursorPos X="44" Y="965"/> <TopLine Value="954"/> - <EditorIndex Value="9"/> <UsageCount Value="13"/> - <Loaded Value="True"/> </Unit46> <Unit47> <Filename Value="../../Units/MMLAddon/PSInc/pscompile.inc"/> <CursorPos X="67" Y="97"/> <TopLine Value="87"/> - <EditorIndex Value="22"/> + <EditorIndex Value="11"/> <UsageCount Value="81"/> <Loaded Value="True"/> </Unit47> @@ -413,7 +411,7 @@ <UnitName Value="bitmaps"/> <CursorPos X="44" Y="692"/> <TopLine Value="666"/> - <EditorIndex Value="20"/> + <EditorIndex Value="9"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit50> @@ -586,7 +584,7 @@ <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/other.inc"/> <CursorPos X="1" Y="1"/> <TopLine Value="1"/> - <EditorIndex Value="23"/> + <EditorIndex Value="12"/> <UsageCount Value="25"/> <Loaded Value="True"/> </Unit76> @@ -735,7 +733,7 @@ <UnitName Value="colourpicker"/> <CursorPos X="18" Y="100"/> <TopLine Value="96"/> - <EditorIndex Value="12"/> + <EditorIndex Value="1"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit98> @@ -874,7 +872,7 @@ <UnitName Value="ocr"/> <CursorPos X="19" Y="91"/> <TopLine Value="75"/> - <EditorIndex Value="17"/> + <EditorIndex Value="6"/> <UsageCount Value="146"/> <Loaded Value="True"/> </Unit117> @@ -1054,9 +1052,7 @@ <UnitName Value="EditorOptions"/> <CursorPos X="24" Y="286"/> <TopLine Value="274"/> - <EditorIndex Value="1"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit144> <Unit145> <Filename Value="../../../lazarus/ide/frames/editor_color_options.pas"/> @@ -1083,9 +1079,7 @@ <UnitName Value="SourceEditor"/> <CursorPos X="37" Y="5085"/> <TopLine Value="5069"/> - <EditorIndex Value="7"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit147> <Unit148> <Filename Value="../../../lazarus/ide/checklfmdlg.pas"/> @@ -1102,9 +1096,7 @@ <UnitName Value="Main"/> <CursorPos X="17" Y="1871"/> <TopLine Value="1860"/> - <EditorIndex Value="4"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit149> <Unit150> <Filename Value="../../../lazarus/ide/buildfiledlg.pas"/> @@ -1210,9 +1202,9 @@ <ComponentName Value="ScriptFrame"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="framescript"/> - <CursorPos X="45" Y="174"/> - <TopLine Value="171"/> - <EditorIndex Value="24"/> + <CursorPos X="44" Y="178"/> + <TopLine Value="164"/> + <EditorIndex Value="13"/> <UsageCount Value="64"/> <Loaded Value="True"/> </Unit162> @@ -1296,9 +1288,7 @@ <UnitName Value="KeyMapping"/> <CursorPos X="23" Y="2427"/> <TopLine Value="2419"/> - <EditorIndex Value="2"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit174> <Unit175> <Filename Value="../../../lazarus/ide/basedebugmanager.pas"/> @@ -1438,7 +1428,7 @@ <Filename Value="../../Units/MMLAddon/PSInc/Wrappers/ocr.inc"/> <CursorPos X="33" Y="4"/> <TopLine Value="1"/> - <EditorIndex Value="16"/> + <EditorIndex Value="5"/> <UsageCount Value="16"/> <Loaded Value="True"/> </Unit196> @@ -1453,177 +1443,61 @@ <UnitName Value="LazarusIDEStrConsts"/> <CursorPos X="3" Y="1407"/> <TopLine Value="1396"/> - <EditorIndex Value="3"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit198> <Unit199> <Filename Value="../../../lazarus/ide/mainbar.pas"/> <UnitName Value="MainBar"/> <CursorPos X="12" Y="166"/> <TopLine Value="155"/> - <EditorIndex Value="5"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit199> <Unit200> <Filename Value="../../../lazarus/ide/mainbase.pas"/> <UnitName Value="MainBase"/> <CursorPos X="8" Y="892"/> <TopLine Value="881"/> - <EditorIndex Value="6"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit200> <Unit201> <Filename Value="../../../lazarus/components/synedit/syneditmarkuphighall.pp"/> <UnitName Value="SynEditMarkupHighAll"/> <CursorPos X="26" Y="22"/> <TopLine Value="1"/> - <EditorIndex Value="11"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit201> <Unit202> <Filename Value="../../../lazarus/components/synedit/syneditmarkup.pp"/> <UnitName Value="SynEditMarkup"/> <CursorPos X="1" Y="1"/> <TopLine Value="145"/> - <EditorIndex Value="8"/> <UsageCount Value="11"/> - <Loaded Value="True"/> </Unit202> <Unit203> <Filename Value="../../../lazarus/components/synedit/syneditmiscclasses.pp"/> <UnitName Value="SynEditMiscClasses"/> <CursorPos X="3" Y="193"/> <TopLine Value="182"/> - <EditorIndex Value="10"/> <UsageCount Value="10"/> - <Loaded Value="True"/> </Unit203> </Units> - <JumpHistory Count="30" HistoryIndex="29"> + <JumpHistory Count="4" HistoryIndex="3"> <Position1> - <Filename Value="../../../lazarus/ide/sourceeditor.pp"/> - <Caret Line="6887" Column="27" TopLine="6876"/> - </Position1> - <Position2> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="41" TopLine="3666"/> - </Position2> - <Position3> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="2432" Column="53" TopLine="2394"/> - </Position3> - <Position4> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="30" TopLine="3666"/> - </Position4> - <Position5> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="1093" Column="22" TopLine="1082"/> - </Position5> - <Position6> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="12" TopLine="3669"/> - </Position6> - <Position7> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3737" Column="40" TopLine="3737"/> - </Position7> - <Position8> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3816" Column="17" TopLine="3784"/> - </Position8> - <Position9> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="15" TopLine="3669"/> - </Position9> - <Position10> - <Filename Value="../../../lazarus/ide/sourceeditor.pp"/> - <Caret Line="2" Column="61" TopLine="1"/> - </Position10> - <Position11> - <Filename Value="../../../lazarus/ide/sourceeditor.pp"/> - <Caret Line="5079" Column="19" TopLine="5066"/> - </Position11> - <Position12> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="880" Column="60" TopLine="869"/> - </Position12> - <Position13> <Filename Value="testunit.pas"/> <Caret Line="541" Column="43" TopLine="531"/> - </Position13> - <Position14> + </Position1> + <Position2> <Filename Value="testunit.pas"/> <Caret Line="615" Column="18" TopLine="610"/> - </Position14> - <Position15> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="880" Column="59" TopLine="869"/> - </Position15> - <Position16> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="1985" Column="13" TopLine="1983"/> - </Position16> - <Position17> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="922" Column="15" TopLine="911"/> - </Position17> - <Position18> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="2432" Column="89" TopLine="2424"/> - </Position18> - <Position19> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="465" Column="9" TopLine="439"/> - </Position19> - <Position20> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="2432" Column="33" TopLine="2421"/> - </Position20> - <Position21> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="14" TopLine="3669"/> - </Position21> - <Position22> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="922" Column="15" TopLine="911"/> - </Position22> - <Position23> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="76" TopLine="3669"/> - </Position23> - <Position24> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="1113" Column="20" TopLine="1102"/> - </Position24> - <Position25> - <Filename Value="../../../lazarus/components/synedit/synedit.pp"/> - <Caret Line="965" Column="44" TopLine="954"/> - </Position25> - <Position26> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="3680" Column="76" TopLine="3669"/> - </Position26> - <Position27> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="162" Column="7" TopLine="151"/> - </Position27> - <Position28> + </Position2> + <Position3> <Filename Value="framescript.pas"/> <Caret Line="32" Column="24" TopLine="32"/> - </Position28> - <Position29> - <Filename Value="../../../lazarus/ide/editoroptions.pp"/> - <Caret Line="285" Column="1" TopLine="280"/> - </Position29> - <Position30> + </Position3> + <Position4> <Filename Value="framescript.pas"/> <Caret Line="182" Column="1" TopLine="166"/> - </Position30> + </Position4> </JumpHistory> </ProjectOptions> <CompilerOptions> diff --git a/Projects/forking/project1.lpi b/Projects/forking/project1.lpi new file mode 100644 index 0000000..842c5ad --- /dev/null +++ b/Projects/forking/project1.lpi @@ -0,0 +1,194 @@ +<?xml version="1.0"?> +<CONFIG> + <ProjectOptions> + <Version Value="7"/> + <General> + <Flags> + <MainUnitHasCreateFormStatements Value="False"/> + <MainUnitHasTitleStatement Value="False"/> + </Flags> + <MainUnit Value="0"/> + <TargetFileExt Value=""/> + <Icon Value="0"/> + <UseXPManifest Value="True"/> + <ActiveEditorIndexAtStart Value="0"/> + </General> + <VersionInfo> + <ProjectVersion Value=""/> + <Language Value=""/> + <CharSet Value=""/> + </VersionInfo> + <PublishOptions> + <Version Value="2"/> + <IgnoreBinaries Value="False"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> + </local> + </RunParams> + <Units Count="8"> + <Unit0> + <Filename Value="project1.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="project1"/> + <CursorPos X="30" Y="18"/> + <TopLine Value="1"/> + <EditorIndex Value="0"/> + <UsageCount Value="20"/> + <Loaded Value="True"/> + </Unit0> + <Unit1> + <Filename Value="../../../../Documents/fpc/packages/fcl-process/src/process.pp"/> + <UnitName Value="process"/> + <CursorPos X="23" Y="94"/> + <TopLine Value="72"/> + <EditorIndex Value="4"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit1> + <Unit2> + <Filename Value="../../../../Documents/fpc/packages/fcl-process/src/unix/process.inc"/> + <CursorPos X="34" Y="138"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit2> + <Unit3> + <Filename Value="../../../../Documents/fpc/packages/ncurses/src/form.pp"/> + <UnitName Value="form"/> + <CursorPos X="42" Y="9"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit3> + <Unit4> + <Filename Value="../../../../Documents/fpc/packages/fv/src/time.pas"/> + <UnitName Value="Time"/> + <CursorPos X="44" Y="9"/> + <TopLine Value="1"/> + <UsageCount Value="10"/> + </Unit4> + <Unit5> + <Filename Value="../../../../Documents/fpc/rtl/linux/system.pp"/> + <UnitName Value="System"/> + <CursorPos X="40" Y="9"/> + <TopLine Value="350"/> + <EditorIndex Value="3"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit5> + <Unit6> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <UnitName Value="ExtCtrls"/> + <CursorPos X="22" Y="324"/> + <TopLine Value="316"/> + <EditorIndex Value="1"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit6> + <Unit7> + <Filename Value="../../../../Documents/lazarus/lcl/customtimer.pas"/> + <UnitName Value="CustomTimer"/> + <CursorPos X="37" Y="39"/> + <TopLine Value="27"/> + <EditorIndex Value="2"/> + <UsageCount Value="10"/> + <Loaded Value="True"/> + </Unit7> + </Units> + <JumpHistory Count="16" HistoryIndex="15"> + <Position1> + <Filename Value="../../../../Documents/fpc/packages/fcl-process/src/process.pp"/> + <Caret Line="158" Column="9" TopLine="132"/> + </Position1> + <Position2> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="1" Column="1" TopLine="1"/> + </Position2> + <Position3> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="324" Column="9" TopLine="316"/> + </Position3> + <Position4> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="329" Column="26" TopLine="316"/> + </Position4> + <Position5> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="389" Column="26" TopLine="374"/> + </Position5> + <Position6> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="1166" Column="19" TopLine="1151"/> + </Position6> + <Position7> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="1248" Column="44" TopLine="1233"/> + </Position7> + <Position8> + <Filename Value="../../../../Documents/lazarus/lcl/extctrls.pp"/> + <Caret Line="324" Column="22" TopLine="316"/> + </Position8> + <Position9> + <Filename Value="project1.lpr"/> + <Caret Line="53" Column="19" TopLine="26"/> + </Position9> + <Position10> + <Filename Value="project1.lpr"/> + <Caret Line="71" Column="15" TopLine="49"/> + </Position10> + <Position11> + <Filename Value="project1.lpr"/> + <Caret Line="9" Column="38" TopLine="1"/> + </Position11> + <Position12> + <Filename Value="project1.lpr"/> + <Caret Line="55" Column="37" TopLine="40"/> + </Position12> + <Position13> + <Filename Value="project1.lpr"/> + <Caret Line="57" Column="68" TopLine="40"/> + </Position13> + <Position14> + <Filename Value="project1.lpr"/> + <Caret Line="56" Column="23" TopLine="43"/> + </Position14> + <Position15> + <Filename Value="../../../../Documents/fpc/packages/fcl-process/src/process.pp"/> + <Caret Line="119" Column="71" TopLine="104"/> + </Position15> + <Position16> + <Filename Value="project1.lpr"/> + <Caret Line="75" Column="50" TopLine="88"/> + </Position16> + </JumpHistory> + </ProjectOptions> + <CompilerOptions> + <Version Value="8"/> + <Target> + <Filename Value="project1"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)/"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Other> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <Debugging> + <Exceptions Count="3"> + <Item1> + <Name Value="EAbort"/> + </Item1> + <Item2> + <Name Value="ECodetoolError"/> + </Item2> + <Item3> + <Name Value="EFOpenError"/> + </Item3> + </Exceptions> + </Debugging> +</CONFIG> diff --git a/Projects/forking/project1.lpr b/Projects/forking/project1.lpr new file mode 100644 index 0000000..38c9ea2 --- /dev/null +++ b/Projects/forking/project1.lpr @@ -0,0 +1,117 @@ +program project1; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Classes, SysUtils, CustApp, Process + { you can add units after this }; + +type + + { TMyApplication } + + TMyApplication = class(TCustomApplication) + protected + procedure DoRun; override; + public + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure WriteHelp; virtual; + end; + +{ TMyApplication } + +procedure TMyApplication.DoRun; +var + ErrorMsg: String; + + Processes: array of TProcess; + i, c, a:integer; + +begin + + // quick check parameters + ErrorMsg:=CheckOptions('h','help'); + if ErrorMsg<>'' then begin + ShowException(Exception.Create(ErrorMsg)); + Terminate; + Exit; + end; + + // parse parameters + if HasOption('h','help') then begin + WriteHelp; + Terminate; + Exit; + end; + + a := 5; + SetLength(Processes, a); + for i := 0 to a - 1 do + begin + Processes[i] := TProcess.Create(Self); + Processes[i].CommandLine := 'echo "wat"'; + Processes[i].ApplicationName := 'ForkingTest: ' + inttostr(i); + Processes[i].Execute; + Writeln('Process ' + inttostr(i) + ', has ID ' + inttostr(Processes[i].ProcessID)); + end; + + sleep(10000); + while true do + begin + c := 0; + for i := 0 to a - 1 do + begin + if not Processes[i].Running then + c := c + 1; + end; + if c = a then + break; + sleep(1000); + end; + + for i := 0 to a - 1 do + begin + Processes[i].Free; + end; + { add + + end; + your program here } + + // stop program loop + Terminate; +end; + +constructor TMyApplication.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + StopOnException:=True; +end; + +destructor TMyApplication.Destroy; +begin + inherited Destroy; +end; + +procedure TMyApplication.WriteHelp; +begin + { add your help code here } + writeln('Usage: ',ExeName,' -h'); +end; + +var + Application: TMyApplication; + +{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} + +begin + Application:=TMyApplication.Create(nil); + Application.Title:='My Application'; + Application.Run; + Application.Free; +end. +