Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
1

Проверка существования потока

20.04.2016, 19:25. Показов 2691. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь сделать динамическое создание нескольких потоков. Суть вот в чем. Программе дается задача, задача направляется в поток. ВОЗМОЖНО, программа может сразу получить еще, еще, и еще одну такую же задачу, но уже с другими параметрами. Если ставить в очередь, то будет долго. Почитал как сделать динамическое создание потоков, но не совсем понимаю как реализовать само создание. В смысле как проверить условие существование какого - то потока, что бы создать его копию с другими параметрами?
Создаю так (Исправьте пожалуйста, если можно, если у меня не правильно):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i := 0 to 10 do
    if (поток не существует) then
       begin
          ReadData[i] := ReadDataF.Create(True);
          ReadData[i].FreeOnTerminate := True;
          try
            ReadData[i].InFileName := pchar('data.f');
            ReadData[i].OutFileName := pchar('jpg.jpg');
            ReadData[i].position := num;
            ReadData[i].Flen := 100;
            ReadData[i].Resume;
         finally
         end;
       end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2016, 19:25
Ответы с готовыми решениями:

Проверка существования файла
Привет, надо организовать, проверку файлов на существование, путем делфи. Как можно это сделать...

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

Проверка существования процесса
Всем привет,помогите у меня есть программа она запускается нормально, но мне нужно чтоб когда...

Проверка существования файла
Немогу разобраться... Есть своя программа, она должна создавать рядом с собой файл (текстовый из...

10
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.04.2016, 20:16 2
Цитата Сообщение от Ранши Посмотреть сообщение
for i := 0 to 10 do
10 - это что за цифирь ? Откуда взялась ?
0
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
20.04.2016, 20:24  [ТС] 3
Крайнее число, сомневаюсь что потоков может быть больше 5, потому что первый отработает быстрее чем пользователь успеет создать 6-й. Просто взял с запасом
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
20.04.2016, 20:31 4
Лучший ответ Сообщение было отмечено Ранши как решение

Решение

Цитата Сообщение от Ранши Посмотреть сообщение
В смысле как проверить условие существование какого - то потока, что бы создать его копию с другими параметрами?
не совсем ясна цель сего действа, обычно создается некоторое количество потоков, выполняющих определенную задачу (в данном случае задача однотипная, исходные данные различны, число доп. потоков - 11), по окончанию работы какого-то потока проверяется не наличие работающих потоков, а наличие необработанных данных и если такие имеются, то создают еще экземпляр потока, придерживаясь заданного числа работающих потоков как-то так:

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
const
   THREAD_COUNT = 11;
...
   FCountTh: byte;
...
procedure TSomeClass.Go()
begin
   FCountTh := 0;
 
   while FCountTh <= THREAD_COUNT do
   begin
      RunThread ();
      inc(FCountTh);
   end;
end;
 
procedure TSomeClass.RunThread ()
begin
  with TMyThreadClass.Create(true) do
  begin
   {передаем данные для работы потока}
   FreeOnTerminate := true;
   OnTerminate := TerminateThread;
   Resume;
  end;
end;
 
procedure TSomeClass.TerminateThread(Sender: TObject)
begin
   dec(FCountTh); 
 
   if {данные для работы потоков еще имеются} then
   begin
      RunThread ();
      inc(FCountTh);
   end;
end;
1
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
20.04.2016, 20:36  [ТС] 5
То что надо) Большое вам спасибо!
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
20.04.2016, 20:40 6
Цитата Сообщение от Ранши Посмотреть сообщение
сомневаюсь что потоков может быть больше 5
Их может быть и больше, но стремиться следует к кол-ву одновременно работающих потоков, равному кол-ву физических либо виртуальных ядер CPU.

Цитата Сообщение от Ранши Посмотреть сообщение
Если ставить в очередь, то будет долго
Без очереди не обойтись, если макс.кол-во одновременно работающих потоков фиксировано (и это нормально), а кол-во распределяемых между ними задач не ограничено.
0
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
21.04.2016, 00:44  [ТС] 7
Цитата Сообщение от mss Посмотреть сообщение
mss
Обязательно учту это в будущем.

Добавлено через 46 минут
Эмм.. а почему когда запускаешь программу в дебаггере, то возникает ошибка "Процесс не может получить доступ к файлу так как файл занят другим процессом" ? А если ее запустить просто, то все отлично работает... Не сталкивался с таким
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.04.2016, 08:15 8
Все что угодно может быть
0
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
21.04.2016, 08:41  [ТС] 9
Цитата Сообщение от mss Посмотреть сообщение
Все что угодно может быть
Дело в том, что этот файл моей программы, ни кто другой к нему в принципе обращаться не может. Unlocker тоже не показывает ни каких дискрипторов ведущих к файлу, ProcMonitor тоже не показывает. Однако, когда программа пытается его открыть на чтение то выдается такая ошибка. Ни как не пойму в чем дело.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.04.2016, 09:10 10
Цитата Сообщение от Ранши Посмотреть сообщение
Однако, когда программа пытается его открыть на чтение то выдается такая ошибка
Значит твоя же программа где-то ранее уже открыла его монопольно.

Не по теме:


ни кто
Ни как
§ 90

0
12 / 11 / 7
Регистрация: 19.04.2016
Сообщений: 201
21.04.2016, 09:29  [ТС] 11
Спасибо, буду искать ошибку)

PS. Стыдно
0
21.04.2016, 09:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2016, 09:29
Помогаю со студенческими работами здесь

Проверка на существования файла
Привет, прошу тапками не швыряться, я новичок, только начал изучение :) Пытаюсь сделать вот такую...

Проверка существования записи
Доброго времени суток Мне нужно организовать проверку существования записи в файле Если запись...

Работа с реестром. Проверка на существования
Здравствуйте. Помогите решить трабл. В Креатформе создать проверку на существование ветки в...

Проверка существования ПК в локальной сети
Возник вопрос, есть такой код: begin if DirectoryExists('//user1/test/') then begin ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru