|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.03.2019, 22:44 | #1 |
Новичок
Джуниор
Регистрация: 08.03.2019
Сообщений: 2
|
Нужна помощь в ознакомлении с многопотоковыми приложениями на Delpi 7
Приветствую! Начал ознакамливаться с потоками на делфи для себя и возможной дипломной работы. В теории всё понятно, а на практике возникают проблемы, программа не хочет выполнять больше 1 потока по нажатию кнопки. Задачка простая - создать массив из N элементов, его перемешивание и поиск чисел с одинаковыми цифрами. По нажатию на кнопку для каждого потока, каждый из потоков выполняется нормально, ошибок нет, работает каждый раз, каждый запуск (проверял с 2-мя потоками). объединяю их в параллельную работу по нажатию кнопки, не хочет, ошибки и всё. Скину код и скриншоты примерных ошибок, буду рад быстрому ответу))
Код:
2.jpg серого окна быть не должно, должно быть перемешанные значения. 3.jpg |
09.03.2019, 00:24 | #2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Владимир_Юрьевич
Переписать весь код. Визуальные компоненты не являются потоко-безопасными. Это значит, вы должны сами их обезопасить. Отсюда ваши ошибки. Многим не очевидно, но факт в том, что форма и мемо являются для потоков общими ресурсами. А теория гласит, что доступ к общим ресурсам должен быть обезопасен путём использования примитивов синхронизации. Мьютексы, критические секции и тому подобное. Ещё можно раздать каждому потоку свой диапазон в массиве. Но только в масиве, а не в Memo. Я так понял вы хотите менять размер массива, то вы должны послать сообщения потокам с требованиям остановится на перекур. Дождаться пока все второстепенные потоки остановятся и только тогда из основного потока вы сможете изменить размер массива, а после вновь запустить остановленные потоки одновременно просигнализировав им о изменении размера массива. Вернее вначале по сигнализировать потом запустить. Причем просто так усыпить поток не получится, его нужно перевести в безопасное состояние в котором он готов к изменению его же переменных.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 09.03.2019 в 00:30. |
09.03.2019, 06:58 | #3 |
Новичок
Джуниор
Регистрация: 08.03.2019
Сообщений: 2
|
Вроде пошло
Спасибо за помощь, вроде пашет! ошибок нет. Только при дальней повторной работе (запуске) с 5-10 раза. Для знаний пойдет. Если есть какие то ошибки, укажите, чтоб закрепить знания)
Код:
|
09.03.2019, 08:07 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
Код:
прежде всего "реальный" (для практических целей) процесс за такое время время не выполнит своей задачи. а ожидание действительно значимой величины времени "повесит" основной поток на то самое время за которое он и сам смог бы выполнить это. второе. никто не может гарантировать что действие будет выполнено за отведенное время. для извещения основного(или любого другого) об ОКОНЧАНИИ действий потока есть OnTeminate Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 09.03.2019 в 08:13. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delpi and winapi | Кольша | Win Api | 5 | 29.01.2012 23:02 |
Delpi-перекодировка | Бурундук | Помощь студентам | 9 | 21.08.2010 13:27 |
Классы в delpi | Koby | Помощь студентам | 6 | 15.06.2010 21:39 |
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) | Farridjan | Помощь студентам | 1 | 03.07.2009 12:24 |
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) | 5Paladin5 | Помощь студентам | 3 | 02.07.2009 09:12 |