На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Thread Error , Thread Error: Неверный дескриптор (6)
    У меня следующая проблемма: При Destryct'е Потока у меня возникает следующая ошибка "Thread Error: Неверный дескриптор (6)". Думал что может он уже где-то выгружается - поставил Free вместо Destryct, результат тотже :(
    Кто сталкивался подскажите пожалуйста..

    ЗЫ Вообще все работало, потом я добавил еще один поток, начала вылетать эта ошибка.. Я его удалил, а ошибка осталась..
      А исходник можно, а то не очень понятно
        Нашел в чем проблема..
        Проблема была в том что у меня на потоке было установлено свойство FreeOnTerminate:=true;
        Получается когда переменная Terminate изменялась в true поток сам себя выгружал, а потом я его еще пытался вручную тушить.. :huh: (скорей всего я сильно ошибаюсь)

        ЗЫ Только почему-то раньше это работе не мешало.. что очень подозрительно... :blink:

        Добавлено
        Да и еще... теперь приложение нехило подвисает при остановке потока.. <_<

        Код ксожелению выложить немогу т.к. там очень много всякого... выложу когда буду дома, щас некогда..
          На роботу меня не взяли :P Поэтому выкладываю:
          ExpandedWrap disabled
            ...........
             
            type
              TSnThread = class(TThread)
              private
                Packet: array[0..500] of Byte;
                SPacket,CPacket: array[0..500] of Byte;
                SPOffset,CPOffset: Integer;
              protected
                procedure Execute; override;
              public
                Htt: String;
              end;
             
            type
              TForm1 = class(TForm)
                Button1: TButton;
                procedure Button1Click(Sender: TObject);
              private
                FSnThread: TSnThread;
              end;
             
            ...........
             
            procedure TSnThread.Execute;
            begin
              try
                while not Terminated do
                begin
                 //!!!  ЗДЕСЬ Я ВСЕ ЗАКОНСПЕКТИРОВАЛ!! А Ошибка осталась..
                end;
              finally
                {Здесь тоже}
              end;
            end;
             
            procedure TForm1.Button1Click(Sender: TObject);
            begin
              if FSnThread<>nil then
              begin
                FSnThread.Destroy;
                FSnThread:=nil;
                Button1.Caption:='Start';
              end else
               begin
                 FSnThread:=TSnThread.Create(True);
                 FSnThread.Htt:='455';
                 FSnThread.SPOffset:=0;
            //ЕСЛИ СТРОЧКУ НИЖЕ убрать, все норм работает, только сильно подвисает при остановке потока (секунд на 10!!)
                 FSnThread.FreeOnTerminate:=True;  
                 FSnThread.Resume;
                 Button1.Caption:='Stop';
               end;
            end;
             
            end.
            Цитата WiseFalcon @
            try
            while not Terminated do
            begin
            //!!! ЗДЕСЬ Я ВСЕ ЗАКОНСПЕКТИРОВАЛ!! А Ошибка осталась..
            end;
            finally
            {Здесь тоже}
            end;


            Однако здесь основной код, который смотреть надо.
              Цитата Демо @
              здесь основной код, который смотреть надо

              В TSnThread.Execute находится причина подвисания при завершении.

              А уничтожать поток нужно так:
              ExpandedWrap disabled
                  if FSnThread <> nil then
                  begin
                    FSnThread.Terminate;
                    FSnThread := nil;
                    Button1.Caption := 'Start';
                  end else
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0297 ]   [ 16 queries used ]   [ Generated: 14.10.25, 16:44 GMT ]