![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Цитата:
Статистика показывает, что, к сожалению, поиском пользуется 0.(0)1% людей, просто предпочитают сразу задавать вопрос. Собственно, по теме. Я бы строил примерно так. Если задача стоит как список заданий вида: [на этот сервер][закачать][эту папку/файл] то делаем пул потоков-работников, каждый из которых обрабатывает одно задание. Когда поток выполняет задание, он спрашивает (беред из очереди) следующее. Тут тебе потребуются критические секции (CriticalSection). Общее кол-во потоков тоже ограничивается каким-то разумным числом (5-10). Ну и соответсвенно поток-координатор (м.б. главный поток приложения) просто обеспечивает очередь заданий для выполнения и следит когда вся работа закончится. |
|
#17
|
|||
|
|||
|
Цитата:
Код прочел, примерно понял как работает, но лучше от комментировать ![]() |
|
#18
|
||||
|
||||
|
Offtop:
No comments ![]() |
|
#19
|
|||
|
|||
|
Цитата:
Цитата:
Скачал видео и исходник, сейчас буду разбирать и запилю в свой проект. |
|
#20
|
|||
|
|||
|
Хелп! Почему выскакивает ошибка 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 код:
Когда убираю work, то ошибки нет, а с ним выскакивает. Почему так? Последний раз редактировалось ujanin, 10.09.2011 в 15:12. |
|
#21
|
||||
|
||||
|
Силён. Что это строка по твоему делает?
Код:
TNewThread.Create(false); |
|
#22
|
||||
|
||||
|
вот рабочий пример с 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
|
|||
|
|||
|
Цитата:
Последний раз редактировалось ujanin, 12.09.2011 в 08:50. |
|
#24
|
|||
|
|||
|
Цитата:
Спасибо друг! ![]() |