Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.02.2010, 23:43
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию Работа с потоками

Есть проблема. Потоки создаются в процедуре, тестовое приложение является консольным и оно очень быстро выскакивает на финиш, как это преодолеть?Сами потоки стартуют и отрабатывают, однако вот раз от раза совершенно разные результаты на одном наборе данных
Ответить с цитированием
  #2  
Старый 17.02.2010, 23:51
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

В конце процедуры напиши
Код:
ReadLn;
тогда программа будет ожидать нажатия любой клавиши...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 18.02.2010, 00:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не, это не правильно. Если ты нажмешь Ентер до того, как отработают все потоки, то ты получишь тот же результат, что и без readln. Тут тебе программно надо остановить основной поток, пока не отработают все рабочие потоки. Если у тебя дополнительный всего 1 поток, то просто можно у него вызвать метод WaitFor. Этот метод будет ждать, пока поток не закончится. Если потоков много, то надо действовать подругому. Например, создавать в каждом потоке семафоры и в конце их убирать. А основной поток будет просто проверять наличие этих семафоров и, соответственно, когда ни одного не останется - завершаться.
Ответить с цитированием
  #4  
Старый 18.02.2010, 00:13
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию

Спасибо за помощь буду пробовать, а семафоры в Delphi это TEvent если не ошибаюсь да?
Ответить с цитированием
  #5  
Старый 18.02.2010, 00:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ошибаешься. Семафор - это просто название. Можно использовать все, что угодно. Тебе тут мьютексы подойдут.
Ответить с цитированием
  #6  
Старый 18.02.2010, 08:21
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию

еще раз спасибо
Ответить с цитированием
  #7  
Старый 19.02.2010, 00:28
guranvir guranvir вне форума
Начинающий
 
Регистрация: 19.01.2010
Сообщения: 113
Репутация: 11
По умолчанию

Возник еще один вопрос по ходу реализации,все ли операции будут выполнены корректны при работе в потоке: запись\чтение данных из файла,операторы Delphi,функции RTL? Заранее спасибо
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:10.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025