Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2011, 17:41   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Злость Потоки

Вот есть такие потоки:
Код:
unit Sin;

interface

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

type
  SinThread = class(TThread)
  private
  ans:Extended;
  protected
    procedure Execute; override;
    procedure DoSet(X:Extended);
  end;

implementation

uses Unit1,Math;

procedure SinThread.DoSet(X:extended);
begin
      Unit1.Form1.ListBox1.AddItem(FloatToStr(X),nil);
end;

procedure SinThread.Execute;
var i:Integer;
begin
      For I:=1 To 360 Do
      Begin
            ans:=Sin(I*Pi/180);
            Synchronize(Doset(ans));
      End;
end;

end.
Код:
unit Cos;

interface

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

type
  CosThread = class(TThread)
  private
  ans:extended;
  protected
    procedure Execute; override;
    procedure Doset(X:Extended);
  end;

implementation

uses Unit1;

procedure CosThread.Doset(X:Extended);
begin
      Unit1.Form1.ListBox2.AddItem(FloatToStr(X),nil);
end;

procedure CosThread.Execute;
var i:Integer;
begin
      For I:=1 To 360 Do
      Begin
            ans:=Cos(I*Pi/180);
            Synchronize(Doset(ans));
      End;
end;

end.
Код:
unit Tg;

interface

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

type
  TgThread = class(TThread)
  private
  ans:Extended;
  protected
    procedure Execute; override;
    procedure Doset(X:Extended);
  end;

implementation

uses Unit1;

procedure TgThread.Doset(X:Extended);
begin
      Unit1.Form1.ListBox3.AddItem(FloatToStr(X),nil);
end;

procedure TgThread.Execute;
var i:Integer;
begin
      For I:=1 To 360 Do
      Begin
            ans:=Tan(I*Pi/180);
            Synchronize(DoSet(Ans));
      End;
end;

end.
Код:
unit Ctg;

interface

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

type
  CtgThread = class(TThread)
  private
  ans:Extended;
  protected
    procedure Execute; override;
    procedure DoSet(X:Extended);
  end;

implementation

uses Unit1,Math;

procedure CtgThread.DoSet(X:extended);
begin
      Unit1.Form1.ListBox4.AddItem(FloatToStr(X),nil);
end;

procedure CtgThread.Execute;
var i:Integer;
begin
      For I:=1 To 360 Do
      Begin
            Ans:=1/Tan(I*Pi/180);
            Synchronize(CDoSet(Ans));
      End;
end;

end.
Но вот в последнем модуле(Ctg) выдаёт ошибку в строке Synchronize(DoSet(Ans)). Почему? Ведь коды листингов идентичны.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.01.2011, 17:46   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Synchronize(CDoSet(Ans));
Ы ?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 18.01.2011, 17:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ы ?
Видать автору баиньки пора. Утро вечера мудренее
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2011, 17:59   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Ы ?
Прошу прощения, это просто опечатка, в коде этого нет.

А проблему уже исправил, она заключалась в совершенно другом.
Вот так надо было:
Код:
Synchronize(Doset);
А процедуру Doset переписать так:
Код:
procedure SinThread.Doset;
begin
        Unit1.Form1.ListBox1.AddItem(FloatToStr(ans),nil);
end;
И всего-то.
Темку можно закрыть.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.01.2011, 18:03   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Одинаковые листинги, что и говорить...

По теме: вместо синхронизации можно рассмотреть отправку сообщения окну.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 18.01.2011, 18:24   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Одинаковые листинги, что и говорить...
Название модулей и классов не в счёт.
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.01.2011, 20:45   #7
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
Подмигивание

Я не критикую, а просто советую:
вот наверно красивше было бы:
Код:
unit Sin;


interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs;

type
  TFunc = function(x: extended): extended;

  TCalcThread = class(TThread)

  private

  ans:Extended;

  protected

    procedure Execute; override;

    procedure DoSet(X:Extended);

  public

    af: TFunc;

    constructor Create(CreateSuspended: Boolean; f:TFunc);

  end;



implementation



uses Unit1,Math;


constructor TCalcThread.Create(CreateSuspended: Boolean; f:TFunc);
begin
  inherited Create(CreateSuspended);
  af :=f;
end;


procedure TCalcThread.Doset;

begin

        Unit1.Form1.ListBox1.AddItem(FloatToStr(ans),nil);

end;



procedure TCalcThread.Execute;

var i:Integer;

begin

      For I:=1 To 360 Do

      Begin

            ans:=a;)f(I*Pi/180);

            Synchronize(Doset);

      End;

end;



end.
и потом насоздавать так их:
Код:
ThSin := TCalcThread.Create(false, sin);
ThCos := TCalcThread.Create(false, cos);
...
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 18.01.2011 в 20:48.
SNUPY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки Djeka(c) Помощь студентам 13 28.10.2010 08:28
потоки sergei64_89 Помощь студентам 2 20.10.2010 02:08
Потоки _PROGRAMM_ Помощь студентам 9 26.09.2010 19:27
потоки Владимир1988 Помощь студентам 0 08.02.2010 23:12