Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.04.2012, 11:59
ThreadDelphi ThreadDelphi вне форума
Прохожий
 
Регистрация: 08.04.2012
Сообщения: 1
Репутация: 10
Восклицание Помогите с потоками плиз!

Нужно, чтобы memo заполнялось числами с помощью n-го количества потоков. Числа заполняются, только вот потоки некоректно работают (скорость остается такой же, как и без использования потоков). Подскажите, пожалуйста, где косяк.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SyncObjs;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

  
  TNewThread=class(TThread)
  private
   procedure UpdateMemo;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
    end;

var
  Form1: TForm1;
  x,y,Thread:integer;
  Work:boolean;
  cs:TCriticalSection;

implementation

{$R *.dfm}

constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  x:=-1;
  Work:=true;
  for Thread:=1 to strtoint(Edit1.Text) do
    TNewThread.Create(false);
  Thread:=strtoint(Edit1.Text);
end;

procedure TNewThread.Execute;
begin
  while Work do
    begin
      cs.enter;
      inc(x);
      if x<1000 then y:=x else work:=false;
      cs.leave;
      if work then
      Synchronize(UpdateMemo);
    end;
  dec(thread);
end;

procedure TNewThread.UpdateMemo;
begin
 Form1.Memo1.Lines.Add(inttostr(y));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  cs:=TCriticalSection.create;
end;

end.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:52.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025