Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/125: Рейтинг темы: голосов - 125, средняя оценка - 4.54
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326

[Delphi] Многопоточность

29.08.2010, 11:10. Показов 25967. Ответов 67
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Интерисует след. вопрос:
"Как сделать создание потоков? (кол-во зависит от того сколько укажет пользователь)"

Хотелось бы увидеть "готовый код", лазя по гуглу оч много информации, но там слишком много лишнего текста читая который тупо мозг взрывается ))

Добавлено через 4 минуты
+ как сделать синхронизацию (Первый пост редактировать не могу, проблемы в опере...)

Добавлено через 19 часов 3 минуты
Есть следующие строчки
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;
 
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
 
 
procedure TNewThread.Execute;
begin
 
end;
 
 
 TNewThread.Create(false);
Если последнюю строчку я зациклю циклом for у меня будут создаваться новые потоки? или будет циклиться один?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2010, 11:10
Ответы с готовыми решениями:

Многопоточность в Delphi
Доброго времени суток однако, люди помоги, есть следующая задача: нужно создать программу которая вычисляет простоту числа 3-мя потоками,...

Подскажите где можно почитать про многопоточность в Delphi
Всем привет! Из названия темы уже ясно, что мне нужна информация по многопоточности в Delphi. Дайте пару линков где можно найти почитать...

Что лучше брать Delphi XE2, Delphi XE, Delphi 7?
Привет форумчане! У меня вопрос: что лучше брать Delphi XE2, Delphi XE, Delphi 7? Как вообще различаются серия Delphi XE, и Delphi 7?

67
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 13:08
Цитата Сообщение от WestSide072 Посмотреть сообщение
Если последнюю строчку я зациклю циклом for у меня будут создаваться новые потоки? или будет циклиться один?
будут создаваться новые потоки (но чтобы с ними работать на иметь переменные типа потока которым присваивать вновь созданные потоки)
Цитата Сообщение от WestSide072 Посмотреть сообщение
+ как сделать синхронизацию
есть несколько вариантов, самый просто и часто используемый это семафор.

Не по теме:

Цитата Сообщение от WestSide072 Посмотреть сообщение
Первый пост редактировать не могу, проблемы в опере...
В опере не может быть проблема, опера рулит ИМХО


Цитата Сообщение от WestSide072 Посмотреть сообщение
Хотелось бы увидеть "готовый код"
есть лаба на тему поток и их синхронизации, могу дать посмотреть, только там нет комментов...
1
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 13:16
вот лаба (там есть Семафор для синхронизации потоков, и Mutex для синхронизации проги с виндой)
Вложения
Тип файла: rar Lab2.rar (524.1 Кб, 763 просмотров)
2
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 15:06  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
вот лаба (там есть Семафор для синхронизации потоков, и Mutex для синхронизации проги с виндой)
Если я правильно понял то именно эти строчки синхронизируют...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var wait: dword;
      ...
while(true) do
  begin
    wait:=WaitForSingleObject(hSemaphore,INFINITE); //дает паузу если занято О_о
    if wait = WAIT_OBJECT_0 then //проверяет если паузы нет то продолжаем
    begin
      inc(number);
      flag:=false;
      j:=0;
      while(j<i) do
      begin
        if Round(number/list[j])=number/list[j] then flag:=true;
        inc(j);
      end;
      if not flag then
      begin
        if MainForm.ListBox.Count>18 then MainForm.ListBox.Items.Delete(0);
        MainForm.ListBox.Items.Add(IntToStr(i)+': '+IntToStr(number));
        list[i]:=number;
        inc(i);
      end;
Верно? Поправь если что не так...

А что за процедура
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure Analyze;
begin
  while(true) do
  begin
    sleep(100);
    WaitForSingleObject(hSemaphore,INFINITE);
    MainForm.ProgressBar.Position:=Round(i/100);
    MainForm.PercentLabel.Caption:=IntToStr(Round(i/100))+'%';
    ReleaseSemaphore(hSemaphore,1,nil);
  end;
end;
Как я понял она тоже связана с синхронизаций О_о
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 15:24
Цитата Сообщение от WestSide072 Посмотреть сообщение
Delphi
1
wait:=WaitForSingleObject(hSemaphore,INFINITE); //дает паузу если занято О_о
не совсем. Ждет пока семафор не освободится
Цитата Сообщение от WestSide072 Посмотреть сообщение
if wait = WAIT_OBJECT_0 then //проверяет если паузы нет то продолжаем
на самом деле эта строчка в принципе не нужна, она проверяет правильно ли семафор освобожден/захвачен
Цитата Сообщение от WestSide072 Посмотреть сообщение
А что за процедура
если мне память не изменяет, в этой лабе потоки я создавал через АПИ а не через класс, поэтому эта процедура для класса потока и будет Execute
0
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 16:05  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;
 
type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
      hThread: THandle;
    ThreadID: dword;
    { Private declarations }
  public
    { Public declarations }
  end;
 
    procedure Execute;
 
var
  Form1: TForm1;
  hSemaphore: THandle;
  i: word;
  k:Integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var pn,pm:Integer;
begin
hSemaphore:=CreateSemaphore(nil,1,1,nil);
pm:=StrToInt(Form1.Edit1.Text);
for pn:=0 to pm do
begin
hThread:=BeginThread(nil,0,@Execute,nil,0,ThreadID);
end
end;
 
procedure Execute;
var wait: dword;
begin
  while 0=0 do
  begin
  sleep(100);
    wait:=WaitForSingleObject(hSemaphore,INFINITE);
        i:=i+1;
    Form1.Memo1.Lines.Add(IntTOStr(i));
    Form1.IdHttp1.Get('http://fineproxy.ru');
    end;
    end;
 
end.
Щас чтобы проверить написал такую программу, поидее она должна качать страницу http://fineproxy.ru зацикленно но она этого не делает! Тыкаю по кнопке и поток выполняется 1раз.
Вопросы:
* Я правильно синхронизировал?
* Почему он не циклиться?
1
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 17:59
начнем с простого:
Цитата Сообщение от WestSide072 Посмотреть сообщение
Delphi
1
2
3
4
for pn:=0 to pm do
begin
hThread:=BeginThread(nil,0,@Execute,nil,0,ThreadID);
end
при таком раскладе, советую использовать класс потока а не АПИ

Добавлено через 1 минуту
У меня:
Цитата Сообщение от WestSide072 Посмотреть сообщение
Delphi
1
2
3
4
WaitForSingleObject(hSemaphore,INFINITE);
 MainForm.ProgressBar.Position:=Round(i/100);
 MainForm.PercentLabel.Caption:=IntToStr(Round(i/100))+'%';
 ReleaseSemaphore(hSemaphore,1,nil);
У тебя
Цитата Сообщение от WestSide072 Посмотреть сообщение
Delphi
1
2
3
4
wait:=WaitForSingleObject(hSemaphore,INFINITE);
 i:=i+1;
 Form1.Memo1.Lines.Add(IntTOStr(i));
 Form1.IdHttp1.Get('http://fineproxy.ru');
найди разницу, у меня семафор освобождается, у тебя - нет, поэтому:
Цитата Сообщение от WestSide072 Посмотреть сообщение
Почему он не циклиться?
Цитата Сообщение от WestSide072 Посмотреть сообщение
Тыкаю по кнопке и поток выполняется 1раз
Добавлено через 29 секунд

Не по теме:

подробнее поясню когда гонка закончится (F1)



Добавлено через 1 час 10 минут
Цитата Сообщение от Vas-e-na Посмотреть сообщение
при таком раскладе, советую использовать класс потока а не АПИ
а зачем столько одиннаковых потоков???
Цитата Сообщение от WestSide072 Посмотреть сообщение
sleep(100);
зачем? тебе не нужно

потом я так и не понял суть задачи, поэтому не знаю с чего начинать, чтобы было понятно что делать???
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 18:12  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
начнем с простого:

при таком раскладе, советую использовать класс потока а не АПИ

Добавлено через 1 минуту
У меня:

У тебя

найди разницу, у меня семафор освобождается, у тебя - нет, поэтому:



Добавлено через 29 секунд

Не по теме:

подробнее поясню когда гонка закончится (F1)



Добавлено через 1 час 10 минут

а зачем столько одиннаковых потоков???

зачем? тебе не нужно

потом я так и не понял суть задачи, поэтому не знаю с чего начинать, чтобы было понятно что делать???
Я это написал чисто для теста работает или нет.
PS код действительно заработал, зациклился, но при запуске в 50 потоков вылетает дофига ошибок и программа вырубается... + ну оооочеееень медленная скорость ='(
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 18:32
Цитата Сообщение от WestSide072 Посмотреть сообщение
при запуске в 50 потоков вылетает дофига ошибок и программа вырубается.
потому что через API (ID потока и Хендл записываются в одну переменную, т.е. потом потоки тупо не остановить...) поэтому я и говорю, что надо делать через класс потока. А синхронизацию надо использовать для разделяемых ресурсов, чтобы несколько потоков одновременно не обратились к одному и тому же объекту...

Добавлено через 1 минуту
Цитата Сообщение от WestSide072 Посмотреть сообщение
ну оооочеееень медленная скорость
потому что в итоге получается что потоки работают последовательно (объекты с которыми они работают в единичном экземпляре...)
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 19:00  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
потому что через API (ID потока и Хендл записываются в одну переменную, т.е. потом потоки тупо не остановить...) поэтому я и говорю, что надо делать через класс потока. А синхронизацию надо использовать для разделяемых ресурсов, чтобы несколько потоков одновременно не обратились к одному и тому же объекту...

Добавлено через 1 минуту

потому что в итоге получается что потоки работают последовательно (объекты с которыми они работают в единичном экземпляре...)
1.) класс потока это вот так?
Delphi
1
2
3
4
5
6
7
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;
2.) Т.е если я на форму положу 5 - 10 idHttp то надо будет прописывать новые потоки и в них пути к IdHttp? можно как то сделать чтобы поток выбирал свободный IdHttp?
1
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 19:24
Цитата Сообщение от WestSide072 Посмотреть сообщение
1.) класс потока это вот так?
абсолютно верно
Цитата Сообщение от WestSide072 Посмотреть сообщение
2.) Т.е если я на форму положу 5 - 10 idHttp то надо будет прописывать новые потоки и в них пути к IdHttp? можно как то сделать чтобы поток выбирал свободный IdHttp?
можно для каждого IdHttp создать свой семафор, и в потоке проходится по семафорам искать не занятый

Добавлено через 6 минут
Цитата Сообщение от Vas-e-na Посмотреть сообщение
можно для каждого IdHttp создать свой семафор, и в потоке проходится по семафорам искать не занятый
но еще лучше чтобы кдля каждого потока был свой объект, тогда семафоры вообще не будут нужны, а "процессы" будут выполнятся "паралельно"
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 19:46  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
абсолютно верно

можно для каждого IdHttp создать свой семафор, и в потоке проходится по семафорам искать не занятый

Добавлено через 6 минут

но еще лучше чтобы кдля каждого потока был свой объект, тогда семафоры вообще не будут нужны, а "процессы" будут выполнятся "паралельно"
А если например писать программу на 200 а то и 500 потоков? например тот же коннектер к сайту, для поднятия онлайна гостей, ведь не буду же я 500 потоков прописывать...
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 19:50
Цитата Сообщение от WestSide072 Посмотреть сообщение
А если например писать программу на 200 а то и 500 потоков? например тот же коннектер к сайту, для поднятия онлайна гостей, ведь не буду же я 500 потоков прописывать...
зачем 500 писать, если они работают по одному алгоритму, то описывается один класс потока, а когда ты создаешь свои 500 !объектов! этого класса просто в конструктор (заранее его надо перегрузить) передаешь параметры для каждого конкретного потока.
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
29.08.2010, 19:58  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
зачем 500 писать, если они работают по одному алгоритму, то описывается один класс потока, а когда ты создаешь свои 500 !объектов! этого класса просто в конструктор (заранее его надо перегрузить) передаешь параметры для каждого конкретного потока.
вот к примеру код потока:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure Execute;
var wait: dword;
begin
  while 0=0 do
  begin
    wait:=WaitForSingleObject(hSemaphore,INFINITE);
        i:=i+1;
    Form1.Memo1.Lines.Add(IntTOStr(i));
    Form1.IdHttp1.Get('http://WestSide072.ucoz.ru');
     ReleaseSemaphore(hSemaphore,1,nil);
    end;
    end;
Как мне сделать чтобы каждый новый поток обращался не к одному и тому же IdHttp1, а каждый к своему, учитывая что колличество потоков может быть под 500...

немного подумав понял что ты говорил про
Delphi
1
2
3
4
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;
а что тут надо изменить?
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
29.08.2010, 20:14
вообщем шаблон будет вот так выглядеть:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{...}
interface
{...}
type
{...}
  TMyThread = class (TThread)
  private
    // здесь объявляете все параметры для работы потока
  protected
    procedure Execute; override;
  public
    constructor Create({!ВАШ! список параметров}; CreateSuspended: Boolean); overload;
  end;
{...}
implementation
{...}
constructor TMyThread.Create({!ВАШ! список параметров}; CreateSuspended: Boolean);
begin
  Create(CreateSuspended: Boolean); // вызов конструктора базового класса
  // здесь делаете присваение параметров потоку
end;
procedure TMyThread.Execute;
begin
  // А здесь уже творите что хотите
end;
{...}
end.
вот, если надеетесь на мою дальнейшую помощь, жду вашу !полную! реализацию класса (для проверки) для дальнейших инструкций и критики
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
11.09.2010, 12:01  [ТС]
Цитата Сообщение от Vas-e-na Посмотреть сообщение
вообщем шаблон будет вот так выглядеть:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{...}
interface
{...}
type
{...}
  TMyThread = class (TThread)
  private
    // здесь объявляете все параметры для работы потока
  protected
    procedure Execute; override;
  public
    constructor Create({!ВАШ! список параметров}; CreateSuspended: Boolean); overload;
  end;
{...}
implementation
{...}
constructor TMyThread.Create({!ВАШ! список параметров}; CreateSuspended: Boolean);
begin
  Create(CreateSuspended: Boolean); // вызов конструктора базового класса
  // здесь делаете присваение параметров потоку
end;
procedure TMyThread.Execute;
begin
  // А здесь уже творите что хотите
end;
{...}
end.
вот, если надеетесь на мою дальнейшую помощь, жду вашу !полную! реализацию класса (для проверки) для дальнейших инструкций и критики
Вот снова появилось свободное время, решил вернуться к изучению "многопоточности",
щас завалю вопросами )))

"{!ВАШ! список параметров}" - о каких параметрах идут речь? =l приоритеты потока? ну я больше не знаю =\

"// здесь делаете присваение параметров потоку" - а это я просто не умею =_=

"// здесь объявляете все параметры для работы потока" - речь идет о переменных и прочем?

Добавлено через 15 часов 59 минут
up =_=
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
12.09.2010, 02:11
Цитата Сообщение от WestSide072 Посмотреть сообщение
Вот снова появилось свободное время, решил вернуться к изучению "многопоточности",
щас завалю вопросами )))
"{!ВАШ! список параметров}" - о каких параметрах идут речь? =l приоритеты потока? ну я больше не знаю =\
"// здесь делаете присваение параметров потоку" - а это я просто не умею =_=
"// здесь объявляете все параметры для работы потока" - речь идет о переменных и прочем?
ну для данного вами случая, все это будут объекты/переменные типа Tidhhtp
просто судя по тому, что по всем комментариям вопросы - вы плохо разираетесь в в понятие класса, конструктора, разъяснять это нету смысла ибо любая книга об ООП начинается с этих понятий, для вас же я просто прокомментирую свои комментарии (может поможет):
Цитата Сообщение от WestSide072 Посмотреть сообщение
// здесь объявляете все параметры для работы потока
т.е. объявляются объекты/переменные, с которыми будет работать поток, допустим:
Delphi
1
idHttp: TidHttp;
Цитата Сообщение от WestSide072 Посмотреть сообщение
{!ВАШ! список параметров}
опять же сюда вписывается то с чем будет работать поток, пример:
Delphi
1
ThreadHttp: TidHttp;
Цитата Сообщение от WestSide072 Посмотреть сообщение
// здесь делаете присваение параметров потоку
ну тут на самом деле я в шоке от того что возхник вопрос, ибо я даже не знаю как прокомментировать, просто приведу пример:
Delphi
1
idHttp:=ThreadidHttp;
в принципе все просто, за счет именно этого, вы сможете описать один класс, а использовать несколько объектов этого класса, каждый из которых будет работать аналогично другому, но именно с тем объектом который ему приписан.
PS как еще это пояснить - я здаюсь, берите литературу - читайте, авторы хоть излагают мысль лучше меня....
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
12.09.2010, 11:03  [ТС]
Можно ли как то сделать чтобы к названиюь обьекта (IdHttp) просто приписывалась цифра... например IdHttp+1=Idhttp1, что то подобное...
Да вы правы, мне сейчас очень сложно изучать дэльфи т.к. не читал книг про нее...
Да и времени нет...
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
12.09.2010, 11:44
Цитата Сообщение от WestSide072 Посмотреть сообщение
Можно ли как то сделать чтобы к названиюь обьекта (IdHttp) просто приписывалась цифра... например IdHttp+1=Idhttp1, что то подобное...
где?, да и зачем???
1
37 / 15 / 3
Регистрация: 15.07.2010
Сообщений: 326
12.09.2010, 12:43  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    IdHTTP1: TIdHTTP;
    IdHTTP2: TIdHTTP;
    IdHTTP3: TIdHTTP;
    IdHTTP4: TIdHTTP;
    IdHTTP5: TIdHTTP;
    IdHTTP6: TIdHTTP;
    IdHTTP7: TIdHTTP;
    IdHTTP8: TIdHTTP;
    IdHTTP9: TIdHTTP;
    IdHTTP10: TIdHTTP;
    IdHTTP11: TIdHTTP;
    IdHTTP12: TIdHTTP;
    IdHTTP13: TIdHTTP;
    IdHTTP14: TIdHTTP;
    IdHTTP15: TIdHTTP;
    IdHTTP16: TIdHTTP;
    IdHTTP17: TIdHTTP;
    IdHTTP18: TIdHTTP;
    IdHTTP19: TIdHTTP;
    IdHTTP20: TIdHTTP;
    IdHTTP21: TIdHTTP;
    IdHTTP22: TIdHTTP;
    IdHTTP23: TIdHTTP;
    IdHTTP24: TIdHTTP;
    IdHTTP25: TIdHTTP;
    IdHTTP26: TIdHTTP;
    IdHTTP27: TIdHTTP;
    IdHTTP28: TIdHTTP;
    IdHTTP29: TIdHTTP;
    IdHTTP30: TIdHTTP;
    procedure Button1Click(Sender: TObject);
  private
    hThread: THandle;
    ThreadID: dword;
    { Private declarations }
  public
    { Public declarations }
  end;
 
   Execute = class(TThread)
  private
  idHttp: TidHttp;
  protected
    procedure Execute; override;
  public
    constructor Create(ThreadHttp: TidHttp;CreateSuspended: Boolean);
  end;
 
var
  Form1: TForm1;
    hSemaphore: THandle;
  i: word;
  k:Integer;
 
implementation
 
{$R *.dfm}
 
constructor Execute.Create(ThreadHttp: TidHttp;CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
  IdHTTP:=ThreadidHttp;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var pn,pm:Integer;
begin
hSemaphore:=CreateSemaphore(nil,1,1,nil);
pm:=StrToInt(Form1.Edit1.Text);
for pn:=0 to pm do
begin
Execute.Create(false);
end
end;
 
procedure Execute.Execute;
var wait: dword;
begin
  while 0=0 do
  begin
    wait:=WaitForSingleObject(hSemaphore,INFINITE);
        i:=i+1;
    Form1.Memo1.Lines.Add(IntTOStr(i));
    Form1.IdHttp1.Get('http://WestSide072.ucoz.ru');
     ReleaseSemaphore(hSemaphore,1,nil);
    end;
    end;
 
end.
компилятор ругается на строчки
Delphi
1
IdHTTP:=ThreadidHttp;
Delphi
1
Execute.Create(false);
и
Delphi
1
2
    hThread: THandle;
    ThreadID: dword;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2010, 12:43
Помогаю со студенческими работами здесь

Многопоточность
Видел много статей по многопоточности,но мне надо просто самое основное. var s:string; begin s:='qwe'; showmessage(s); ...

Многопоточность
Гуглил, информации в интернете много, даже слишком, поэтому голова уже взрывается. Суть проблемы: есть форма, есть цикл, при работе цикла...

Многопоточность
Добрый день. Возникал у меня следующая проблема. Пишу программу по расчетам фазового равновесия пар-жидкость. В основном достаточно сложная...

Многопоточность
Здравствуйте! Прошу помочь реализовать многопоточность. Написал брут, когда запускаю в 1 поток, всё идёт ок, как запускаю в 2 и более всё...

многопоточность
Всем привет! Вопрос в следующем: файл скачивается из интернета с помощью следующей функции: function GetInetFile(const fileURL,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru