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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.09.2011, 22:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,093
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от ujanin
Как дойду до них буду разбираться, просто иногда ступор, вот и прошу помощи в этой теме. Вы же помогаете не только мне, а тем миллиардам людей в будущем, которые будут искать подобные решения задач

Статистика показывает, что, к сожалению, поиском пользуется 0.(0)1% людей, просто предпочитают сразу задавать вопрос.

Собственно, по теме.
Я бы строил примерно так.
Если задача стоит как список заданий вида:
[на этот сервер][закачать][эту папку/файл]
то делаем пул потоков-работников, каждый из которых обрабатывает одно задание. Когда поток выполняет задание, он спрашивает (беред из очереди) следующее. Тут тебе потребуются критические секции (CriticalSection). Общее кол-во потоков тоже ограничивается каким-то разумным числом (5-10).
Ну и соответсвенно поток-координатор (м.б. главный поток приложения) просто обеспечивает очередь заданий для выполнения и следит когда вся работа закончится.
Ответить с цитированием
  #17  
Старый 09.09.2011, 22:38
ujanin ujanin вне форума
Прохожий
 
Регистрация: 07.09.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ну уж если к такому коду комментарии писать, то однозначно - за учебники.
Ну я в начале темы и написал, что новичек, да и раздел для начинающих Код прочел, примерно понял как работает, но лучше от комментировать
Ответить с цитированием
  #18  
Старый 09.09.2011, 22:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Offtop:
No comments
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #19  
Старый 09.09.2011, 22:49
ujanin ujanin вне форума
Прохожий
 
Регистрация: 07.09.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Статистика показывает, что, к сожалению, поиском пользуется 0.(0)1% людей, просто предпочитают сразу задавать вопрос.
Ну тут двояко. Я например задал вопрос на этом форуме, но мне никто не ответил, все нашел по методу "прогуглил яндекс". Но когда искал часто натыкался на тему, где похожие вопросы без ответа, так что отсюда вытекает, смысл от поиска, если знающие люди по тем или иным причинам не отвечают новичкам?

Цитата:
Сообщение от lmikle
Собственно, по теме.
Я бы строил примерно так.
Если задача стоит как список заданий вида:
[на этот сервер][закачать][эту папку/файл]
то делаем пул потоков-работников, каждый из которых обрабатывает одно задание. Когда поток выполняет задание, он спрашивает (беред из очереди) следующее. Тут тебе потребуются критические секции (CriticalSection). Общее кол-во потоков тоже ограничивается каким-то разумным числом (5-10).
Ну и соответсвенно поток-координатор (м.б. главный поток приложения) просто обеспечивает очередь заданий для выполнения и следит когда вся работа закончится.
Я в голове понимаю, что мне надо, только сложность в том что не владею инструментарием delphi, но потихоничку по частям собираю проект в кучу. Вот кстате хороший видео урок Многопоточность и синхронизация delphi http://avtuh.ru/2010/10/10/delphi-vi...onizaciya.html
Скачал видео и исходник, сейчас буду разбирать и запилю в свой проект.
Ответить с цитированием
  #20  
Старый 10.09.2011, 15:03
ujanin ujanin вне форума
Прохожий
 
Регистрация: 07.09.2011
Сообщения: 15
Репутация: 10
По умолчанию

Хелп! Почему выскакивает ошибка Project.Project2.exe raised exception class EAccessViolation with message 'Access violation at address 00427DA0 in module 'Project2.exe'. Read of address 0000000000'. Process stoped. Use Step or Run to continue. при нажатии на батон.

PHP код:
procedure TForm1.Button1Click(SenderTObject);
var
  
Acc:integer;
  
Work:boolean;
begin

   work
:=true;
   
Acc:=-1;
   for 
Thread:=1  to strtoint(Edit1.Text) do
   
TNewThread.Create(false);
   
Thread:=strtoint(Edit1.Text);
  
end


Когда убираю work, то ошибки нет, а с ним выскакивает. Почему так?

Последний раз редактировалось ujanin, 10.09.2011 в 15:12.
Ответить с цитированием
  #21  
Старый 10.09.2011, 21:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Силён. Что это строка по твоему делает?
Код:
    TNewThread.Create(false);
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #22  
Старый 11.09.2011, 08:50
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

вот рабочий пример с Work:

Код:
unit Unit1;

interface

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

type
  TNewThread = class(TThread)
  protected
    procedure Execute; override; 
  end;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TNewThread }

procedure TNewThread.Execute;
begin
  Sleep(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Thread: Integer;
  Work: Boolean;
begin
  Work:=True;
  for Thread:=1 to StrToInt(Edit1.Text) do
    TNewThread.Create(False);
  if Work then PostMessage(Handle, WM_CLOSE, 0, 0);
end;

end.

http://data.cod.ru/123478
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 11.09.2011 в 08:53.
Ответить с цитированием
  #23  
Старый 12.09.2011, 08:40
ujanin ujanin вне форума
Прохожий
 
Регистрация: 07.09.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Силён. Что это строка по твоему делает?
Код:
    TNewThread.Create(false);
Я взял исходник вот тут http://avtuh.ru/2010/10/10/delphi-vi...onizaciya.html как за пример и хотел переделать для себя, но т.к. я новичек не понял некоторые моменты кода, и этот один из этих моментов. Процедуру с потоком TNewThread переделал для себя. По идеи эта функция должна запускать потоки.

Последний раз редактировалось ujanin, 12.09.2011 в 08:50.
Ответить с цитированием
  #24  
Старый 12.09.2011, 08:40
ujanin ujanin вне форума
Прохожий
 
Регистрация: 07.09.2011
Сообщения: 15
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
вот рабочий пример с Work:

Код:
unit Unit1;

interface

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

type
  TNewThread = class(TThread)
  protected
    procedure Execute; override; 
  end;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TNewThread }

procedure TNewThread.Execute;
begin
  Sleep(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Thread: Integer;
  Work: Boolean;
begin
  Work:=True;
  for Thread:=1 to StrToInt(Edit1.Text) do
    TNewThread.Create(False);
  if Work then PostMessage(Handle, WM_CLOSE, 0, 0);
end;

end.

http://data.cod.ru/123478

Спасибо друг!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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