Changeset 141


Ignore:
Timestamp:
Jan 24, 2011, 8:49:56 AM (14 years ago)
Author:
george
Message:
  • Added: Scheduler Start and Stop methods.
Location:
MicroThreading
Files:
1 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • MicroThreading/Demo/Demo.lpi

    r140 r141  
    6161        <EditorIndex Value="0"/>
    6262        <WindowIndex Value="0"/>
    63         <TopLine Value="76"/>
    64         <CursorPos X="27" Y="92"/>
     63        <TopLine Value="176"/>
     64        <CursorPos X="42" Y="177"/>
    6565        <UsageCount Value="39"/>
    6666        <Loaded Value="True"/>
     
    7272        <EditorIndex Value="10"/>
    7373        <WindowIndex Value="0"/>
    74         <TopLine Value="175"/>
    75         <CursorPos X="28" Y="180"/>
     74        <TopLine Value="183"/>
     75        <CursorPos X="20" Y="194"/>
    7676        <UsageCount Value="20"/>
    7777        <Loaded Value="True"/>
     
    261261        <TopLine Value="254"/>
    262262        <CursorPos X="12" Y="258"/>
    263         <UsageCount Value="11"/>
     263        <UsageCount Value="12"/>
    264264        <Loaded Value="True"/>
    265265      </Unit25>
     
    271271        <TopLine Value="581"/>
    272272        <CursorPos X="11" Y="585"/>
    273         <UsageCount Value="11"/>
     273        <UsageCount Value="12"/>
    274274        <Loaded Value="True"/>
    275275      </Unit26>
     
    280280        <TopLine Value="525"/>
    281281        <CursorPos X="11" Y="538"/>
    282         <UsageCount Value="11"/>
     282        <UsageCount Value="12"/>
    283283        <Loaded Value="True"/>
    284284      </Unit27>
     
    286286    <JumpHistory Count="30" HistoryIndex="29">
    287287      <Position1>
    288         <Filename Value="../UMicroThreading.pas"/>
    289         <Caret Line="257" Column="44" TopLine="173"/>
     288        <Filename Value="UMainForm.pas"/>
     289        <Caret Line="41" Column="24" TopLine="28"/>
    290290      </Position1>
    291291      <Position2>
    292         <Filename Value="../UMicroThreading.pas"/>
    293         <Caret Line="141" Column="25" TopLine="125"/>
     292        <Filename Value="UMainForm.pas"/>
     293        <Caret Line="182" Column="45" TopLine="169"/>
    294294      </Position2>
    295295      <Position3>
    296296        <Filename Value="../UMicroThreading.pas"/>
    297         <Caret Line="127" Column="20" TopLine="125"/>
     297        <Caret Line="8" Column="57" TopLine="1"/>
    298298      </Position3>
    299299      <Position4>
    300         <Filename Value="UMainForm.pas"/>
    301         <Caret Line="191" Column="33" TopLine="171"/>
     300        <Filename Value="../UMicroThreading.pas"/>
     301        <Caret Line="71" Column="20" TopLine="49"/>
    302302      </Position4>
    303303      <Position5>
    304         <Filename Value="UMainForm.pas"/>
    305         <Caret Line="182" Column="38" TopLine="159"/>
     304        <Filename Value="../UMicroThreading.pas"/>
     305        <Caret Line="97" Column="24" TopLine="75"/>
    306306      </Position5>
    307307      <Position6>
    308         <Filename Value="UMainForm.pas"/>
    309         <Caret Line="41" Column="24" TopLine="28"/>
     308        <Filename Value="../UMicroThreading.pas"/>
     309        <Caret Line="119" Column="38" TopLine="97"/>
    310310      </Position6>
    311311      <Position7>
    312312        <Filename Value="../UMicroThreading.pas"/>
    313         <Caret Line="120" Column="38" TopLine="118"/>
     313        <Caret Line="126" Column="61" TopLine="104"/>
    314314      </Position7>
    315315      <Position8>
    316316        <Filename Value="../UMicroThreading.pas"/>
    317         <Caret Line="67" Column="20" TopLine="66"/>
     317        <Caret Line="182" Column="34" TopLine="147"/>
    318318      </Position8>
    319319      <Position9>
    320         <Filename Value="UMainForm.pas"/>
    321         <Caret Line="41" Column="24" TopLine="28"/>
     320        <Filename Value="../UMicroThreading.pas"/>
     321        <Caret Line="277" Column="45" TopLine="258"/>
    322322      </Position9>
    323323      <Position10>
    324         <Filename Value="UMainForm.pas"/>
    325         <Caret Line="182" Column="45" TopLine="169"/>
     324        <Filename Value="../UMicroThreading.pas"/>
     325        <Caret Line="136" Column="14" TopLine="120"/>
    326326      </Position10>
    327327      <Position11>
    328         <Filename Value="../UMicroThreading.pas"/>
    329         <Caret Line="8" Column="57" TopLine="1"/>
     328        <Filename Value="UMainForm.pas"/>
     329        <Caret Line="191" Column="91" TopLine="173"/>
    330330      </Position11>
    331331      <Position12>
    332         <Filename Value="../UMicroThreading.pas"/>
    333         <Caret Line="71" Column="20" TopLine="49"/>
     332        <Filename Value="UMainForm.pas"/>
     333        <Caret Line="179" Column="40" TopLine="165"/>
    334334      </Position12>
    335335      <Position13>
    336336        <Filename Value="../UMicroThreading.pas"/>
    337         <Caret Line="97" Column="24" TopLine="75"/>
     337        <Caret Line="193" Column="1" TopLine="181"/>
    338338      </Position13>
    339339      <Position14>
    340340        <Filename Value="../UMicroThreading.pas"/>
    341         <Caret Line="119" Column="38" TopLine="97"/>
     341        <Caret Line="11" Column="56" TopLine="1"/>
    342342      </Position14>
    343343      <Position15>
    344344        <Filename Value="../UMicroThreading.pas"/>
    345         <Caret Line="126" Column="61" TopLine="104"/>
     345        <Caret Line="15" Column="33" TopLine="1"/>
    346346      </Position15>
    347347      <Position16>
    348         <Filename Value="../UMicroThreading.pas"/>
    349         <Caret Line="182" Column="34" TopLine="147"/>
     348        <Filename Value="UMainForm.pas"/>
     349        <Caret Line="202" Column="91" TopLine="183"/>
    350350      </Position16>
    351351      <Position17>
    352352        <Filename Value="../UMicroThreading.pas"/>
    353         <Caret Line="277" Column="45" TopLine="258"/>
     353        <Caret Line="42" Column="22" TopLine="22"/>
    354354      </Position17>
    355355      <Position18>
    356356        <Filename Value="../UMicroThreading.pas"/>
    357         <Caret Line="136" Column="14" TopLine="120"/>
     357        <Caret Line="92" Column="1" TopLine="92"/>
    358358      </Position18>
    359359      <Position19>
    360360        <Filename Value="UMainForm.pas"/>
    361         <Caret Line="191" Column="91" TopLine="173"/>
     361        <Caret Line="89" Column="19" TopLine="72"/>
    362362      </Position19>
    363363      <Position20>
    364         <Filename Value="UMainForm.pas"/>
    365         <Caret Line="179" Column="40" TopLine="165"/>
     364        <Filename Value="../UMicroThreading.pas"/>
     365        <Caret Line="75" Column="22" TopLine="62"/>
    366366      </Position20>
    367367      <Position21>
    368         <Filename Value="../UMicroThreading.pas"/>
    369         <Caret Line="193" Column="1" TopLine="181"/>
     368        <Filename Value="UMainForm.pas"/>
     369        <Caret Line="89" Column="22" TopLine="76"/>
    370370      </Position21>
    371371      <Position22>
    372372        <Filename Value="../UMicroThreading.pas"/>
    373         <Caret Line="11" Column="56" TopLine="1"/>
     373        <Caret Line="175" Column="9" TopLine="175"/>
    374374      </Position22>
    375375      <Position23>
    376376        <Filename Value="../UMicroThreading.pas"/>
    377         <Caret Line="15" Column="33" TopLine="1"/>
     377        <Caret Line="79" Column="20" TopLine="64"/>
    378378      </Position23>
    379379      <Position24>
    380         <Filename Value="UMainForm.pas"/>
    381         <Caret Line="202" Column="91" TopLine="183"/>
     380        <Filename Value="../UMicroThreading.pas"/>
     381        <Caret Line="172" Column="23" TopLine="170"/>
    382382      </Position24>
    383383      <Position25>
    384384        <Filename Value="../UMicroThreading.pas"/>
    385         <Caret Line="42" Column="22" TopLine="22"/>
     385        <Caret Line="349" Column="1" TopLine="1"/>
    386386      </Position25>
    387387      <Position26>
    388388        <Filename Value="../UMicroThreading.pas"/>
    389         <Caret Line="92" Column="1" TopLine="92"/>
     389        <Caret Line="192" Column="17" TopLine="179"/>
    390390      </Position26>
    391391      <Position27>
    392         <Filename Value="UMainForm.pas"/>
    393         <Caret Line="89" Column="19" TopLine="72"/>
     392        <Filename Value="../UMicroThreading.pas"/>
     393        <Caret Line="11" Column="66" TopLine="1"/>
    394394      </Position27>
    395395      <Position28>
    396         <Filename Value="../UMicroThreading.pas"/>
    397         <Caret Line="75" Column="22" TopLine="62"/>
     396        <Filename Value="UMainForm.pas"/>
     397        <Caret Line="43" Column="1" TopLine="30"/>
    398398      </Position28>
    399399      <Position29>
    400400        <Filename Value="UMainForm.pas"/>
    401         <Caret Line="89" Column="22" TopLine="76"/>
     401        <Caret Line="83" Column="1" TopLine="70"/>
    402402      </Position29>
    403403      <Position30>
    404         <Filename Value="../UMicroThreading.pas"/>
    405         <Caret Line="175" Column="9" TopLine="175"/>
     404        <Filename Value="UMainForm.pas"/>
     405        <Caret Line="154" Column="16" TopLine="141"/>
    406406      </Position30>
    407407    </JumpHistory>
     
    439439      <Item3>
    440440        <Source Value="umainform.pas"/>
    441         <Line Value="56"/>
     441        <Line Value="55"/>
    442442      </Item3>
    443443      <Item4>
  • MicroThreading/Demo/UMainForm.pas

    r140 r141  
    4141    Scheduler: TMicroThreadScheduler;
    4242    Test: TTest;
    43     Terminate: Boolean;
    44   end;
     43  end;
    4544
    4645var
     
    7372  Scheduler.FreeMicroThreadOnFinish := False;
    7473  Test := TTest.Create;
     74  DoubleBuffered := True;
     75  ListView1.DoubleBuffered := True;
    7576end;
    7677
     
    7879var
    7980  I: Integer;
    80   Executed: Integer;
    8181begin
    8282  if Button1.Caption = 'Start scheduler' then begin
    8383    Button1.Caption := 'Stop scheduler';
    84     Terminate := False;
    8584    Scheduler.MicroThreads.Clear;
    8685    Memo1.Clear;
    8786    for I := 0 to 20 do
    8887      Scheduler.Add('Worker', Worker);
    89     repeat
    90       Executed := Scheduler.Execute(10);
    91       Application.ProcessMessages;
    92       if Executed = 0 then Sleep(1);
    93     until (Scheduler.MicroThreadCount = 0) or Terminate;
     88    Scheduler.Start;
    9489  end else begin
    9590    Button1.Caption := 'Start scheduler';
    96     Terminate := True;
     91    Scheduler.Stop;
    9792  end;
    9893end;
     
    158153procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
    159154begin
    160   Terminate := True;
     155  Scheduler.Stop;
    161156end;
    162157
  • MicroThreading/UMicroThreading.pas

    r140 r141  
    99  {$IFDEF Windows}Windows,{$ENDIF}
    1010  {$IFDEF Linux}BaseUnix, UnixUtil, Unix,{$ENDIF}
    11   Classes, SysUtils, Contnrs, SyncObjs, DateUtils, Dialogs;
     11  Classes, SysUtils, Contnrs, SyncObjs, DateUtils, Dialogs, Forms;
    1212
    1313type
     
    6666    FExecuteCount: Integer;
    6767    FExecutedCount: Integer;
     68    FTerminated: Boolean;
    6869    function GetMicroThreadCount: Integer;
    6970    procedure Yield(MicroThread: TMicroThread);
     
    7677    destructor Destroy; override;
    7778    function Execute(Count: Integer): Integer;
     79    procedure Start;
     80    procedure Stop;
    7881    property MicroThreadCount: Integer read GetMicroThreadCount;
    7982    property FreeMicroThreadOnFinish: Boolean read FFreeMicroThreadOnFinish
     
    167170destructor TMicroThreadScheduler.Destroy;
    168171begin
     172  FTerminated := True;
    169173  ThreadPool.Free;
    170174  MicroThreads.Free;
     
    179183  Yield(nil);
    180184  Result := FExecutedCount;
     185end;
     186
     187procedure TMicroThreadScheduler.Start;
     188var
     189  Executed: Integer;
     190begin
     191  FTerminated := False;
     192  repeat
     193    Executed := Execute(10);
     194    Application.ProcessMessages;
     195    if Executed = 0 then Sleep(1);
     196  until FTerminated;
     197end;
     198
     199procedure TMicroThreadScheduler.Stop;
     200begin
     201  FTerminated := True;
    181202end;
    182203
Note: See TracChangeset for help on using the changeset viewer.