Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает простейшая прога с потоками... :( 
V
    Опции темы
iPlay
Дата 11.10.2010, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Только вот интересно, почему  даже когда второму потоку сделал приоритет выше, все равно первый вызывается первым?
Код

unit Unit1;

interface

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

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

  tnew1 = class(tthread)
  private
    name:string;
    protected
    procedure execute; override;
  end;

  tnew2 = class(tthread)
  private
    name:string;
    protected
    procedure execute; override;
  end;

var
  Form1: TForm1;
  cs: tcriticalsection;
  new1: tnew1;
  new2: tnew2;
  result:real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  new1 := tnew1.create(true);
  new1.freeonterminate := true;
  new1.priority := tptimecritical;
  //new1.priority:=tplowest;
  new1.name:='1st thread';

  new2 := tnew2.create(true);
  new2.freeonterminate := true;
  new2.priority:=tplowest;
  //new2.priority := tptimecritical;
  new2.name:='2nd thread';

  new1.resume;
  new2.resume;
end;

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

procedure TForm1.FormDestroy(Sender: TObject);
begin
  cs.free;
end;

procedure tnew1.execute;
begin
  form1.memo1.lines.add(name);
  randomize;
  cs.enter;
    result:=random(20);
    form1.edit1.text:=floattostr(result);
  cs.leave;
end;

procedure tnew2.execute;
begin
  sleep(2000);
  form1.memo1.lines.add(name);
  cs.enter;
    result:=sin(result);
    form1.edit2.text:=floattostr(result);
  cs.leave;
end;
end.


Добавлено @ 11:54
Кстати спасибо, cat512, стало намного понятнее... Сейчас только вот с приоритетами разобраться.

Это сообщение отредактировал(а) iPlay - 11.10.2010, 13:07
PM MAIL   Вверх
iPlay
Дата 11.10.2010, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Просто я ограничил доступ критическими секциями к общей переменной result и установил приоритеты, этого недостаточно я так понял для надежной синхронизации? 

Сейчас перечитал еще раз теорию, вроде все сделал правильно, но что-то все равно не так, от критических секций толку никакого...



Это сообщение отредактировал(а) iPlay - 11.10.2010, 15:07
PM MAIL   Вверх
iPlay
Дата 11.10.2010, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 23.9.2007

Репутация: нет
Всего: 1



Я проплужил smile)) работало все нормально, а вот вывод в memo smile))
Код

unit Unit1;

interface

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

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

  tnew1 = class(tthread)
  private
    name:string;
    protected
    procedure execute; override;
  end;

  tnew2 = class(tthread)
  private
    name:string;
    protected
    procedure execute; override;
  end;

var
  Form1: TForm1;
  cs,cs2: tcriticalsection;
  new1: tnew1;
  new2: tnew2;
  result:real;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  new1 := tnew1.create(true);
  new1.freeonterminate := true;
  //new1.priority := tptimecritical;
  new1.priority:=tplowest;
  new1.name:='1st thread';

  new2 := tnew2.create(true);
  new2.freeonterminate := true;
  //new2.priority:=tplowest;
  new2.priority := tptimecritical;
  new2.name:='2nd thread';

  new1.resume;
  new2.resume;
end;

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

procedure TForm1.FormDestroy(Sender: TObject);
begin
  cs.free;
end;

procedure tnew1.execute;
begin
  cs.enter;
    randomize;
    form1.memo1.lines.add(name);
    result:=random(20);
    form1.edit1.text:=floattostr(result);
  cs.leave;
end;

procedure tnew2.execute;
begin
  //sleep(2000);
  cs.enter;
    form1.memo1.lines.add(name);
    result:=sin(result);
    form1.edit2.text:=floattostr(result);
  cs.leave;
end;
end.


Большое спасибо, сat512!!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.