Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 22:35   #11
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Для IdHttp достаточно просто обработать события onXXwork...
Насчет TIdAntiFreeze... Да, это выход в некоторых ситуациях, но далеко не во всех, ибо это сугубо иллюзия и не является прямой реализацией асинхронного ввода-вывода. И, кстати, в указанных выше событиях использование Application.ProcessMessages может вполне спасти в некоторых случаях
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 29.04.2009, 22:54   #12
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Neeter Посмотреть сообщение
Хотя нет, вспомнил, на вкладке Indy Misc есть компонент TIdAntiFreeze
Может быть он поможет, но не уверен.
Спасибо, поставил, чуть-чуть но уже лучше

Цитата:
Сообщение от Neeter Посмотреть сообщение
И ничто тут не поможет, только можете в отдельный поток выставить форму показывающую, что сейчас идет длительный процесс.
Аммммм а как

Спасибо!
Des вне форума Ответить с цитированием
Старый 29.04.2009, 22:57   #13
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Для IdHttp достаточно просто обработать события onXXwork...
А что обозначают вот эти ХХ? И собственно как обработать?

Спасибо!
Des вне форума Ответить с цитированием
Старый 29.04.2009, 23:53   #14
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Вот набросал небольшой примерчик:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TNewThread = class(TThread)  //Поток
  private
    { private declarations }
  protected
    procedure execute; override; //Процедура, которая будет происходить при работе потока
  end;
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  NewThread: TNewThread;  //Переменная, обозначающая данный поток

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 NewThread := TNewThread.Create(true); //Создаем
 NewThread.FreeOnTerminate := true;      //Освобождаем память при закрытии потока
 NewThread.Priority := tpLower;               //Назначаем приоритет
 NewThread.Resume;                               //Начинаем действие потока
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 NewThread.Suspend; //Пауза
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 NewThread.Terminate; //Закрываем поток
end;

{ TNewThread }

procedure TNewThread.execute;
begin
 inherited;
 while True do   //Бесконечный цикл
 begin
  if Form1.ProgressBar1.Position <> Form1.ProgressBar1.Max then
   Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + 1
  else
   Form1.ProgressBar1.Position := 0;
  Sleep(20); //Обязательно надо на немного задерживать действие потока(тут задерживаем на 20 миллисекунд)
 end;
end;

end.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 30.04.2009, 01:20   #15
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Neeter
Я так полагаю в предоставленом примере мы не TForm запихиваем в отдельный Thread а то что мешает жить форме .т.е.
Цитата:
Код:
while True do   //Бесконечный цикл
?
Но к примеру у меня есть несколько бесконечных циклов, ассинхронизировать? А не легче как нибудь форму запихать в отдельный поток а все остальное пусть себе тужится ?
Des вне форума Ответить с цитированием
Старый 30.04.2009, 02:05   #16
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Да, можно и так, этот пример на простой progressbar, до остального наверно сам додумаешься)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от мерцания при передвижении Timages. jocry Помощь студентам 13 22.07.2012 09:46
как избавиться от рекламных роликов которые выскакивают при открытии нового окна и не закрываются Jasper92 Свободное общение 4 10.05.2009 23:41
При вставке 20-значного числа в ячейку происходит округление. Как избавиться? urri_k Microsoft Office Excel 9 25.07.2008 23:10
Ошибка при выполнении приложения ADJAVA Общие вопросы по Java, Java SE, Kotlin 0 24.07.2008 11:07
Ошибка при выполнении запроса Elena БД в Delphi 3 14.06.2007 15:13