![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Tronix |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.10.2009 Репутация: нет Всего: нет |
Всем привет.
Наверное вопрос дурацкий, но к сожалению в просмотренных мной темах по потокам в поиске ответа не нашел. Сам я в дельфи новичок, не бейте сильно. Ситуация такая: нужно стартовать поток, потом либо полностью его убить/либо заморозить, и потом создать/стартовать заново. Процедура, которая вызывается из главной формы по нажатию допустим кнопки старт:
Сама процедура потока. Впринципе ничего интересного:
Так вот, поток нормально стартует, но при желании его заморозить вываливается по ексепшену неверный дескриптор на процедуре NewThread.Suspend; Пробовал делать через флаг canrun - из основной программы устанавливаю его в false, чтобы программно заморозить поток, но иногда видимо поток опережает определение флага и проскакивает его. Помогите пожалуйста сделать нормальную остановку и запуск потока. Если уж не с заморозкой, то хотябы подскажите как полностью прибить поток и пересоздать его заного.? Если нужно больше кода или что-то невнятно обьяснил, спросите, я дам больше информации. Извиняюсь за сумбурное изложение, мозг уже плавится, всю ночь и пол дня пытался завести, не получается. Заранее спасибо. |
||||
|
|||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
Убрать
\из процедруы кнопки и поставить его в private (или любую другую) секцию формы. Дело в том, что NewThread при первом нажатии на кнопку <> NewThread при последующих, по выходу из процедуры все переменные, обхявленные в этой процедуре "локально" просто забываются и при новом вызове процедуры в них содержится ерунда, никоим боком не относящаяся к тому, что в них было ранее. Добавлено через 5 минут и 33 секунды И не забыть в OnDestroy формы (или где-там-предусмотрено-логикой-программы) уничтожить поток. Навскидку - использование FreeOnTerminate=True чревато тем, что поток может оказаться уничтоженным, а вот ссылка на него (т.е. переменная newThread) обнулена не будет. Если обратиться к этому потоку после его прерывания, то можн будет схлопатать AV. Может, тоже сумбурно объяснил ![]() |
||||
|
|||||
Tronix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.10.2009 Репутация: нет Всего: нет |
Так так так, улавливаю суть. Сейчас попробуем, спасибо за мысль. По результату отпишусь. UPD: Вроде получилось, когда вывел переменную из функции в глоб преременные. Спасибо за помощь. Это сообщение отредактировал(а) Tronix - 15.10.2009, 18:05 |
|||
|
||||
Tronix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.10.2009 Репутация: нет Всего: нет |
А еще такой вопрос - когда вызываем Thread.Suspend - поток сразу останавливается, или как-то надо подождать его остановки? Вот допустим вызвал я Suspend из основной формы, а в процедуре Execute еще какое-то действие происходит. Как поведет себя поток?
PS: Кому интересно, пишу эмулятор приставки chip8 (не совсем прставки, а интерпретируемого ассемблера для нее, но об этом в вики). |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
1. не делать ни в коем случае suspend/resume потоку, если не понимать, как это работает.
2. прочитать статью про потоки в делфи в разделе винапи на этом форуме. -------------------- There are always someone smarter than you... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |