На главную Наши проекты:
Журнал   ·   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_
  
> Как убить поток?
    Как насильственно и сразу завершить выполнение потока? А то если пользователь выходит из программы во время его выполнения, возникают ошибки,  free и destroy тоже выдают ошибки, а terminate дожидается окончания выполнения
      Как это Terminate ожидает окончания выполнения?
      Вы, видимо, не правильно описали процедуру Execute
      Если, например, у Вас используется обращение к основному VCL потоку через метод Synchronize, тогда при обращении к его процедуре надо писать While not Terminated Do Synchronize(@SynchronizeProc) и т.д. Вообщем ошибка Ваша. Как мимнимум нужен код процедуры Execute, чтобы решить проблему, если сами не решите.
        ExpandedWrap disabled
          <br>procedure TMyThread.Execute;<br>begin<br>getauthors( );<br>gettitles();<br>geturls();<br>getdates();<br>ThreadTerminated:=true; //здесь я устанавливаю эту переменную, чтобы в основном                                            потоке не запустить поток дважды, если юзер вызовет его когда                                     он еще не завершил работу<br>end;<br>


        Через Synchronize не стал делать потому что слишком медленно
          procedure TMyThread.Execute;
          begin
           getauthors();
           if Terminated then Exit;
           gettitles();
           if Terminated then Exit;
           geturls();
           if Terminated then Exit;
           getdates();
          end;
            Цитата Grisha, 11.03.03, 21:29:00
            procedure TMyThread.Execute;
            begin
             getauthors();
             if Terminated then Exit;
              ....
            end;


            Это если при создании потока указывалось FreeOnTeriminate:=True
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0216 ]   [ 15 queries used ]   [ Generated: 17.05.24, 07:12 GMT ]