![]() |
|
#1
|
|||
|
|||
![]() Есть проблема. Потоки создаются в процедуре, тестовое приложение является консольным и оно очень быстро выскакивает на финиш, как это преодолеть?Сами потоки стартуют и отрабатывают, однако вот раз от раза совершенно разные результаты на одном наборе данных
|
#2
|
||||
|
||||
![]() В конце процедуры напиши
Код:
ReadLn; В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
|||
|
|||
![]() Не, это не правильно. Если ты нажмешь Ентер до того, как отработают все потоки, то ты получишь тот же результат, что и без readln. Тут тебе программно надо остановить основной поток, пока не отработают все рабочие потоки. Если у тебя дополнительный всего 1 поток, то просто можно у него вызвать метод WaitFor. Этот метод будет ждать, пока поток не закончится. Если потоков много, то надо действовать подругому. Например, создавать в каждом потоке семафоры и в конце их убирать. А основной поток будет просто проверять наличие этих семафоров и, соответственно, когда ни одного не останется - завершаться.
|
#4
|
|||
|
|||
![]() Спасибо за помощь буду пробовать, а семафоры в Delphi это TEvent если не ошибаюсь да?
|
#5
|
|||
|
|||
![]() Ошибаешься. Семафор - это просто название. Можно использовать все, что угодно. Тебе тут мьютексы подойдут.
|
#6
|
|||
|
|||
![]() еще раз спасибо
|
#7
|
|||
|
|||
![]() Возник еще один вопрос по ходу реализации,все ли операции будут выполнены корректны при работе в потоке: запись\чтение данных из файла,операторы Delphi,функции RTL? Заранее спасибо
|