Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi: Общие вопросы > Поток не стартует |
Автор: faust777 25.09.20, 10:27 |
Что с этим можно сделать? Есть поток <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> TUPD = class(TThread) private FAK: Integer; protected procedure Execute; override; public constructor Create(TH: Integer); end; ......... constructor TUPD.Create(TH: Integer); begin FAK:= TH; inherited Create(False); FreeOnTerminate:= True; end; procedure TUPD.Execute; begin .. end; Всё как бы работает. Но если подвесить форму, например так то поток не запускается (в Execute ни чего не происходит) пока "зависание" не пройдёт. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> for j := 0 to 9 do begin Sleep(1000); end; |
Автор: Gonarh 25.09.20, 10:41 |
http://docs.embarcadero.com/products/rad_s...readMethod.html Добавлено И это, я надеюсь "подвисание" ты вызываешь после старта потока? |
Автор: faust777 25.09.20, 11:04 |
Какая разница когда, это имитация, программу в любой момент может какая либо процедура повесить в этом проблема. И причём тут синхронизация если главный поток ни чего не делает? |
Автор: VisualProg 25.09.20, 11:13 |
Например - большая. Управляющий поток висит, кто твой второй поток запускать будет? |
Автор: faust777 25.09.20, 12:20 |
Не понимаю, кто что где должен запускать? Куда уж напримерней( <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> for j := 0 to 9 do begin TUPD.Create(j); Sleep(1000); end; Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Цикл закончится и форма отвиснет то во всех главных procedure TUPD.Execute; всё отработает как нужно. |
Автор: ЫукпШ 29.09.20, 10:34 |
Цитата faust777 @ Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Каким способом ты узнал, что потоки не запускаются ? |
Автор: Gonarh 29.09.20, 10:58 |
Цитата faust777 @ Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Работают, просто у тебя майнтред не обрабатывает мессаджи. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> for j := 0 to 9 do begin TUPD.Create(j); Sleep(1000); Application.ProcessMessages; end; Добавлено Большая разница Добавлено Вангую, он думает что раз майнтред висит и одупляется после цикла, то и треды тоже стартуют после. |
Автор: Mr.Delphist 30.09.20, 07:50 |
А что в самом теле Execute? |
Автор: ЫукпШ 30.09.20, 11:15 |
А это практически не важно. 1. запускаем утилиту DbgView 2. Модифицируем своё приложение приблизительно так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> procedure TUPD.Execute; begin OutputdebugString('name begin'); .. OutputdebugString('name end'); end; ... ... OutputdebugString('Create begin'); for j := 0 to 9 do begin TUPD.Create(j); Sleep(1000); Application.ProcessMessages; end; OutputdebugString('Create end'); ... Разным потокам присвоим разные имена. Или будем различать их каким-либо иным способом. --- Приложение собираем, запускаем, завершаем. И в результате в окошке внешнего приложения видим последовательность происходящих событий в реальном времени. |
Автор: jack128 30.09.20, 19:18 |
это лишнее, дельфевый отладчик показывает выхлоп от OutputdebugString |
Автор: ЫукпШ 30.09.20, 19:49 |
Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации, в том числе и там, где Дельфи не установлена. Не запускать же постоянно всю эту систему везде и всюду. |
Автор: jack128 30.09.20, 20:33 |
Цитата ЫукпШ @ Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации, в том числе и там, где Дельфи не установлена Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView? ТопикСтартер говорит, что поведение воспроизводимо, значит и под дельфей сможет отладить. ставить сторонний софт из-за каждого бага - хреновый совет |
Автор: ЫукпШ 01.10.20, 11:10 |
Это не сторонний софт, а необходимый инструмент. И ставить его не нужно, установки не требует. А вот ставить дельфи где попало не нужно и просто не возможно. Как поставить дельфи в виртуальной машине ? С целью проверить, как как будет работать приложение по разными ОС. Добавлено Цитата jack128 @ Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView? я это не пробовал, но она может работать и через сеть. --- Гораздо умнее можно было бы возразить - а как работать с DbgView, если захочется отлаживать службу для WIN10 ? |