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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2014, 15:52   #1
MisterON
 
Аватар для MisterON
 
Регистрация: 19.03.2012
Сообщений: 8
По умолчанию многопоточное приложение на Delphi

Нужно разработать приложение с графическим интерфейсом, в котором работают параллельно два потока. В обоих потоках должны происходить какие-то математические вычисления. Буду очень признательна
MisterON вне форума Ответить с цитированием
Старый 03.03.2014, 21:59   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Без наработок Ваших
Пусть хоть некорректных
Вам во Фриланс дорога
Любую прихоть там исполнят
phomm вне форума Ответить с цитированием
Старый 06.03.2014, 17:02   #3
MisterON
 
Аватар для MisterON
 
Регистрация: 19.03.2012
Сообщений: 8
По умолчанию наработки

Код:
function ThreadFunc(Parameter: Pointer): Integer;
var
  x: Integer;
begin
  while true do
  begin
  s:=0;
      for n:=1 to 100 do s:=s+n;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  tid: DWORD;
begin
  BeginThread(nil, 0, @ThreadFunc, nil, 0, tid); // Запускаем первый поток
  BeginThread(nil, 0, @ThreadFunc, nil, 0, tid); // Запускаем второй поток
end;
нужно чтоб в одном из потоков вычислялась вот такая вот функция:
MisterON вне форума Ответить с цитированием
Старый 06.03.2014, 21:55   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Что это за несуразица ?
Функция потока выполняет какую-то ерунду с переменными в 2 циклах, одна из которых нигде не объявлена, значит Вы либо не понимаете из этого ничего и просто что-то скопипастили (что более вероятно), либо для Вас чёрти-пойми что значащие куски кода выкладывать - обычное дело, вместо того, чтобы выложить всё.
Потом, почему у Вас потоки через винапи сделаны ? Такое задание ? Если да, то почему раньше не указали этого ? Потоки в дельфи подразумевают по умолчанию наследование TThread , а не винапишные потоки.
Почему обязательное условие задачи - конкретная функция - озвучено только сейчас, хотя прошло 3 дня ?
Что по Вашему обозначают сокровенные слова "чтобы вычислялась функция" ? Многие функции имеют невообразимо большие области определения, а учитывая ещё и бесконечность делимости действительных чисел - то и вовсе бесконечные вариации аргумента и самой функции, и поскольку решение обычно и означает нахождение значения функции при заданных значениях аргумента, получается, что Вы просите программу выдающую бесконечные пары аргумента и функции. Может Вы ещё что-то забыли (давайте ещё 3 дня подождём) сказать? Наверное нам нужна Ваша задача как воздух, а Вы из скромности (несомненно) её от нас утаиваете, чтобы смаковать моменты щедрости в нашу сторону.

Читайте

Теория по потокам хотя, полагаю, Вам ещё сильно рано это трогать.

Последний раз редактировалось phomm; 06.03.2014 в 21:58.
phomm вне форума Ответить с цитированием
Старый 06.03.2014, 23:38   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так на всякий случай оставлю:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  windows,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}
function ThreadFunc(Parameter: Pointer): Integer;
var
  y,x: double;
begin
  x:=random;
  y:=(2*cos(x-pi/6))/(0.5+sqr(sin(x)));
  Form1.Memo1.Lines.Append(format('%5.2f - %5.2f',[x,y]));
end;
{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  tid: DWORD; i:integer;
begin
  for i:=0 to 10 do
   BeginThread(nil, 0, @ThreadFunc, nil, 0, tid);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.03.2014, 12:55   #6
MisterON
 
Аватар для MisterON
 
Регистрация: 19.03.2012
Сообщений: 8
По умолчанию !!!!!

Никакой это не копипост и функция выполняет не ерунду, а суммирование чисел от 1 до 100(по крайней мере так задумано), переменную не объявила… каюсь. Условия сразу полностью не написала потому что хотела сама доработать (вникнуть). А задание звучит так: “Разработать приложение, в котором работают параллельно два потока. В первом потоке происходит суммирование чисел от 1 до 100, а во втором потоке происходит вычисление значения функции(выше упомянутой)”
MisterON вне форума Ответить с цитированием
Старый 07.03.2014, 12:56   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Только из потоков так к ВЦЛ нельзя. Если АПИ (или обёртку к ним) использовать, то либо мьютексы (крит. секции, семофоры, ...) использовать с передачей обработки ВЦЛ'а самой форме (главному потоку), либо у класса Мемо добавить событие на добавление, а в потоке это событие создавать в нужный момент. Собственно, это одно и то же.
Можно не изобретать ничего, а пользоваться классом TThread с тамошней синхронизацией
eoln вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многопоточное приложение Usov Работа с сетью в Delphi 5 10.02.2014 17:32
многопоточное приложение Vistar Общие вопросы .NET 1 26.08.2011 16:25
многопоточное приложение favorite Общие вопросы Delphi 0 26.05.2011 19:47
Многопоточное приложение MaXoN66613 Помощь студентам 0 07.06.2010 12:36
Многопоточное приложение на Indy Core2Duo Работа с сетью в Delphi 15 08.04.2009 16:45