На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Поток не стартует
    Что с этим можно сделать?

    Есть поток
    ExpandedWrap disabled
        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 ни чего не происходит) пока "зависание" не пройдёт.
    ExpandedWrap disabled
      for j := 0 to 9 do begin
        Sleep(1000);
       end;
      http://docs.embarcadero.com/products/rad_s...readMethod.html

      Добавлено
      И это, я надеюсь "подвисание" ты вызываешь после старта потока?
      Сообщение отредактировано: Gonarh -
        Какая разница когда, это имитация, программу в любой момент может какая либо процедура повесить в этом проблема.
        И причём тут синхронизация если главный поток ни чего не делает?
          Цитата faust777 @
          Какая разница когд

          Например - большая. Управляющий поток висит, кто твой второй поток запускать будет?
            Не понимаю, кто что где должен запускать?

            Куда уж напримерней(
            ExpandedWrap disabled
                  for j := 0 to 9 do begin
                    TUPD.Create(j);
                    Sleep(1000);
                  end;


            Цикл идёт, идёт. Конструктор потоков запускаются, да.
            Но сами потоки то не работают, вопрос почему и что можно сделать?
            Цикл закончится и форма отвиснет то во всех главных procedure TUPD.Execute; всё отработает как нужно.
              Цитата faust777 @
              Цикл идёт, идёт. Конструктор потоков запускаются, да.
              Но сами потоки то не работают, вопрос почему и что можно сделать?

              Каким способом ты узнал, что потоки не запускаются ?
                Цитата faust777 @
                Цикл идёт, идёт. Конструктор потоков запускаются, да.
                Но сами потоки то не работают, вопрос почему и что можно сделать?

                Работают, просто у тебя майнтред не обрабатывает мессаджи.
                ExpandedWrap disabled
                      for j := 0 to 9 do begin
                        TUPD.Create(j);
                        Sleep(1000);
                        Application.ProcessMessages;
                      end;


                Добавлено
                Цитата faust777 @
                Какая разница когда

                Большая разница

                Добавлено
                Цитата ЫукпШ @
                Каким способом ты узнал, что потоки не запускаются ?

                Вангую, он думает что раз майнтред висит и одупляется после цикла, то и треды тоже стартуют после.
                Сообщение отредактировано: Gonarh -
                  Цитата faust777 @
                  procedure TUPD.Execute;
                  begin
                  ..
                  end;


                  А что в самом теле Execute?
                    Цитата Mr.Delphist @
                    А что в самом теле Execute?

                    А это практически не важно.
                    1. запускаем утилиту DbgView
                    2. Модифицируем своё приложение приблизительно так:
                    ExpandedWrap disabled
                      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');
                       
                      ...

                    Разным потокам присвоим разные имена.
                    Или будем различать их каким-либо иным способом.
                    ---
                    Приложение собираем, запускаем, завершаем.
                    И в результате в окошке внешнего приложения видим
                    последовательность происходящих событий в реальном времени.
                    Сообщение отредактировано: ЫукпШ -
                      Цитата ЫукпШ @
                      1. запускаем утилиту DbgView

                      это лишнее, дельфевый отладчик показывает выхлоп от OutputdebugString
                        Цитата jack128 @
                        Цитата ЫукпШ @
                        1. запускаем утилиту DbgView

                        это лишнее, дельфевый отладчик показывает выхлоп от OutputdebugString

                        Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации,
                        в том числе и там, где Дельфи не установлена.
                        Не запускать же постоянно всю эту систему везде и всюду.
                        Сообщение отредактировано: ЫукпШ -
                          Цитата ЫукпШ @
                          Допустим, что мы наблюдаем за поведением приложения в период опытной эксплуатации,
                          в том числе и там, где Дельфи не установлена

                          Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView?
                          ТопикСтартер говорит, что поведение воспроизводимо, значит и под дельфей сможет отладить. ставить сторонний софт из-за каждого бага - хреновый совет
                            Цитата jack128 @
                            ставить сторонний софт из-за каждого бага - хреновый совет

                            Это не сторонний софт, а необходимый инструмент. И ставить его не нужно, установки
                            не требует.
                            А вот ставить дельфи где попало не нужно и просто не возможно.
                            Как поставить дельфи в виртуальной машине ? С целью проверить, как
                            как будет работать приложение по разными ОС.

                            Добавлено
                            Цитата jack128 @
                            Допустим мы наблюдаем за поведением приложения на Альфа Центавре, и у нас нету возможности поставить туда DbgView?

                            я это не пробовал, но она может работать и через сеть.
                            ---
                            Гораздо умнее можно было бы возразить - а как работать
                            с DbgView, если захочется отлаживать службу для WIN10 ?
                            Сообщение отредактировано: ЫукпШ -
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0520 ]   [ 16 queries used ]   [ Generated: 28.03.24, 13:25 GMT ]