| 
| 
 | Вопрос # 4 640/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Есть цепь потоков со схемой 3,1,3,2,2 в них чисто математические вычисления, по окончанию работы поток сохраняет результат и ожидает завершение параллельного потока для продолжения цепи потоков. Потоки работают отлично и по окончании работы каждый из потоков освобождает ресурсы. Но проблема в том, как осуществить возможность приостановки одного из потоков вручную т.к. кнопки для этого установлены, progressbarы стоят для отображения програсса каждого из потоков. Как организовать синхронизацию с формой?
 При использовании 3-х потоков, но без использования команд
 WaitFor и FreeOnTerminate:=True; Ими можно управлять, но при их использовании это становится невозможным.
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) 
|  |   Вопрос задал: prorok-kane (статус: Посетитель)Вопрос отправлен: 8 октября 2010, 00:04
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 8 октября 2010, 15:15; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 8 октября 2010, 08:20 [#1]: Цитата (prorok-kane): как осуществить возможность приостановки одного из потоков вручную А что, в Delphi 2010 методы TThread.Suspend() и TThread.Resume() отменили?
 
 Цитата (prorok-kane): Как организовать синхронизацию с формой? ...и метод TThread.Synchronize() тоже?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 8 октября 2010, 10:23 [#2]:метод Suspend лучше применять с самого треда, а не с другого. Иначе результат может быть плачевным (тред может остановиться посредине вычислений). А вот Resume - можно везде. Что бы управлять этими тредами, можно применить две методики.
 первый подход заключается в том, что после запуска, главный тред (там где находиться форма) не ждет их завершения "активно", через WaitForMultimplyObject (вроде так она называется, ждет завершения множества событий). А каждый тред посылает через PostMessage|SendMessage событие - "я завершился". Главная форма конечно в курсе, сколько тредов она запустила и подсчитывает ответы. Как только получены все - запускает новую порцию.
 Также треды могут по ходу работы присылать промежуточные результаты. Методом SendMessage можно даже присылать указатель/ссылку на внутренние объекты треда и даже модифицировать
  (но только аккуратно). Второй метод заключается в том, что бы для управления этими тредами мы заводит ещё один, управляющий тред. Теперь метод WaitFor не будет тормозить интерфейс
   Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Вадим К (статус: Академик), 8 октября 2010, 11:01 [#3]:посмотрел сорцы.... ужаснулся код
 
 Form1.ProgressBar7.Position:=i;
Synchronize(Form1.Show);Такое писать, да ещё в цикле... НЕЛЬЗЯ ТАК! Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 8 октября 2010, 11:08 [#4]:Хорошо, что я не смотрел! Жуть какая...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | prorok-kane (статус: Посетитель), 8 октября 2010, 14:44 [#5]:У меня с потоками опыта очень мало и поэтому не могли бы вы показать как в моём коде это все реализовать?
 Допустим на примере первых 3-х потоков.
 |  
|   | min@y™ (статус: Доктор наук), 8 октября 2010, 14:50 [#6]: Цитата (prorok-kane): У меня с потоками опыта очень мало и поэтому не могли бы вы показать как в моём коде это все реализовать? Помоги себе сам и опыт появится. Напиши тестовую прогу с одним побочным потоком и попробуй правильно им рулить с помощью методов Suspend(), Resume(), Synchronize().
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 8 октября 2010, 15:15 [#7]:Посмотрите мою статью Скачиваем файлы из интернета - там есть хороший пример работы с потоком, которому нужно обновлять элементы на форме Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |