Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.126.11] |
|
Сообщ.
#1
,
|
|
|
Что с этим можно сделать?
Есть поток 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 ни чего не происходит) пока "зависание" не пройдёт. for j := 0 to 9 do begin Sleep(1000); end; |
Сообщ.
#2
,
|
|
|
http://docs.embarcadero.com/products/rad_s...readMethod.html
Добавлено И это, я надеюсь "подвисание" ты вызываешь после старта потока? |
Сообщ.
#3
,
|
|
|
Какая разница когда, это имитация, программу в любой момент может какая либо процедура повесить в этом проблема.
И причём тут синхронизация если главный поток ни чего не делает? |
Сообщ.
#4
,
|
|
|
Цитата faust777 @ Какая разница когд Например - большая. Управляющий поток висит, кто твой второй поток запускать будет? |
Сообщ.
#5
,
|
|
|
Не понимаю, кто что где должен запускать?
Куда уж напримерней( for j := 0 to 9 do begin TUPD.Create(j); Sleep(1000); end; Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Цикл закончится и форма отвиснет то во всех главных procedure TUPD.Execute; всё отработает как нужно. |
Сообщ.
#6
,
|
|
|
Цитата faust777 @ Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Каким способом ты узнал, что потоки не запускаются ? |
Сообщ.
#7
,
|
|
|
Цитата faust777 @ Цикл идёт, идёт. Конструктор потоков запускаются, да. Но сами потоки то не работают, вопрос почему и что можно сделать? Работают, просто у тебя майнтред не обрабатывает мессаджи. for j := 0 to 9 do begin TUPD.Create(j); Sleep(1000); Application.ProcessMessages; end; Добавлено Цитата faust777 @ Какая разница когда Большая разница Добавлено Цитата ЫукпШ @ Каким способом ты узнал, что потоки не запускаются ? Вангую, он думает что раз майнтред висит и одупляется после цикла, то и треды тоже стартуют после. |
Сообщ.
#8
,
|
|
|
Цитата faust777 @ procedure TUPD.Execute; begin .. end; А что в самом теле Execute? |
Сообщ.
#9
,
|
|
|
Цитата Mr.Delphist @ А что в самом теле Execute? А это практически не важно. 1. запускаем утилиту DbgView 2. Модифицируем своё приложение приблизительно так: 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'); ... Разным потокам присвоим разные имена. Или будем различать их каким-либо иным способом. --- Приложение собираем, запускаем, завершаем. И в результате в окошке внешнего приложения видим последовательность происходящих событий в реальном времени. |
Сообщ.
#10
,
|
|
|
Цитата ЫукпШ @ 1. запускаем утилиту DbgView это лишнее, дельфевый отладчик показывает выхлоп от OutputdebugString |
Сообщ.
#11
,
|
|
|
Цитата jack128 @ Цитата ЫукпШ @ 1. запускаем утилиту DbgView это лишнее, дельфевый отладчик показывает выхлоп от OutputdebugString Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации, в том числе и там, где Дельфи не установлена. Не запускать же постоянно всю эту систему везде и всюду. |
Сообщ.
#12
,
|
|
|
Цитата ЫукпШ @ Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации, в том числе и там, где Дельфи не установлена Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView? ТопикСтартер говорит, что поведение воспроизводимо, значит и под дельфей сможет отладить. ставить сторонний софт из-за каждого бага - хреновый совет |
Сообщ.
#13
,
|
|
|
Цитата jack128 @ ставить сторонний софт из-за каждого бага - хреновый совет Это не сторонний софт, а необходимый инструмент. И ставить его не нужно, установки не требует. А вот ставить дельфи где попало не нужно и просто не возможно. Как поставить дельфи в виртуальной машине ? С целью проверить, как как будет работать приложение по разными ОС. Добавлено Цитата jack128 @ Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView? я это не пробовал, но она может работать и через сеть. --- Гораздо умнее можно было бы возразить - а как работать с DbgView, если захочется отлаживать службу для WIN10 ? |