Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
10 / 10 / 1
Регистрация: 17.10.2011
Сообщений: 114

Создание нескольких потоков

17.10.2011, 19:24. Показов 9116. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть проблемы таковая - мне нужно создать несколько потоков (их количество задаётся в командной строке) и вывести созданным потоком его текущий порядковый номер.
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Classes;
 
type
  TMyThread = class(TThread)
    private
    protected
    procedure Execute; override;
end;
 
var
  MyThread: TMyThread;
  ThreadNumber, i: integer;
 
procedure TMyThread.Execute; //опишем код, который будет выполняться в потоке
begin
  Writeln('I am thread number ', i);
end;
 
begin
  write('Enter number of threads = ');
  read(ThreadNumber);
  for i := 1 to ThreadNumber do
  begin
    MyThread := TMyThread.Create(False); //создаём экземпляр потока //False означает, что поток запускается сам сразу после создания
    MyThread.Priority := tpNormal; //укажем параметры потока, например, приоритет
    MyThread.FreeOnTerminate := True;  //после завершения кода поток завершится автоматически
  end;
  Readln;
  Readln;
end.
Вроде потоки создаются, но вот с выводом порядкового номера где-то я ошибся. Помогите пожалуйста)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.10.2011, 19:24
Ответы с готовыми решениями:

Создание нескольких потоков
Сделать программу, которая создает несколько потоков, но запрещает выделение процессорного времени для них. (создать элементы управления,...

Синхронизация нескольких потоков
Здравствуйте. После нескольких лет пользования tidHttp появилось желание вынести загрузку (а точнее команду http.get(...)) в поток, а...

Запуск одновременно нескольких потоков
Вот как запустить например сразу 20 потоков ? что бы работа, например http запроса или еще что-то выполнялась быстрее. Запуск одного...

2
10 / 10 / 1
Регистрация: 17.10.2011
Сообщений: 114
19.10.2011, 13:53  [ТС]
Уже сам разобрался)
 Комментарий модератора 
Если задача решена - надо публиковать её решение - полностью или основную часть. Форум имеет общественную значимость. Материалы форума читает большое количество людей. И тема считается закрытой, когда либо опубликовано решение, либо участниками решение не найдено.


Добавлено через 4 часа 1 минуту
Mawrat, хорошо.
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
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils, Classes;
 
type
  TMyThread = class(TThread)
    private
      fID: Integer; //переменная - свойства
    protected
      procedure SetID(Value: Integer); //присвоение переменной - свойства значения
      function GetID: Integer; //возврат значения из переменной - свойства
      procedure Execute; override;
    public
      property ThreadID: Integer read GetID write SetID; //само свойство
end;
 
var
  MyThread: TMyThread;
  ThreadNumber, i: integer;
 
//присвоение значения в переменную свойства
procedure TMyThread.SetID(Value: Integer);
begin
  fID:=Value;
end;
 
//функция возврата значения свойства из переменной свойства
Function TMyThread.GetID: Integer;
begin
  Result:=fID;
end;
 
procedure TMyThread.Execute; //код выполняемый в потоке, то есть вывод текущего номера потока
begin
  Writeln('I am thread number ', ThreadID);
end;
 
begin
  write('Enter number of threads = ');
  read(ThreadNumber);
  for i := 1 to ThreadNumber do
    begin
      MyThread := TMyThread.Create(False); //создаём экземпляр потока //False означает, что поток запускается сам сразу после создания
      MyThread.Priority := tpNormal; //параметр потока - приоритет
      MyThread.FreeOnTerminate := True;  //автоматическое завершение потока после завершения кода
      MyThread.ThreadID:=i;
      MyThread.Resume;
    end;
  Readln;
  Readln;
end.
5
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
09.07.2018, 04:01
какой-то спорный тут код
я как-то не уверен, что Writeln потокобезопасная операция. Даже более уверен, что нет. Что это делает в Execute?

далее. Если мы запускаем поток TMyThread.Create(False);
то он уже в пути
и к моменту MyThread.FreeOnTerminate := True; он может уже закончиться, не зная, что ему нужно FreeOnTerminate
А если он наоборот закончится после FreeOnTerminate, то строки 49 и 50 дадут Access Violation
Имелось в виду все-таки TMyThread.Create(True);

Прямо не код, а заботливое грабельное поле...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2018, 04:01
Помогаю со студенческими работами здесь

Обеспечить одновременную работу нескольких потоков
Изучаю delphi сам, по книжкам в основном и на практике. Для одной из очередных задач потребовалось изучение потоков. В основном во всех...

Обращение нескольких потоков к одному участку кода
Здравствуйте, недавно написал программку, которая запускает несколько потоков, ждёт их завершения, и, только потом возвращает управление....

Вывод результата работы нескольких потоков в Memo - выводится данные только последнего
Всем привет. По нажатию кнопки я создаю определенное количество потоков. mythread := tmythread.create(false); в каждом потоке у...

Как подождать завершения нескольких потоков, и если после минуты не завершились продолжать выполнение?
Как подождать завершения нескольких потоков, и если после минуты не завершились продолжать выполнение программы дальше?

Создание потоков в приложении
Привет всем. Подскажите как реализовать или посоветуйте какие нибудь хорошие исходники (в плане комментариев к коду), где используется...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru