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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2010, 17:40   #1
TRIZER
Студент
Пользователь
 
Аватар для TRIZER
 
Регистрация: 13.11.2009
Сообщений: 65
По умолчанию Работа с потоками в Delphi

Здравствуйте, начал работать с потоками прочитал несколько статей по этому поводу, ответов на свои вопросы в них не нашел
Вопросы такие:
- Если создавать объект(не визуальный) внутри потока, что это дает?
- Если методы объекта объявить внутри потока, что это дает?
- Если создать объект в потоке, а методы в другом (основном) потоке это безопасно? и какой эффект ждать?
- Важно ли использовать Synchronize, всегда ли он нужен? Нужен ли он для обращения к переменным/процедурам другого потока

Ну пока что все, возможно что то неправильно называю уж извините новичка

Еще вопрос ... Вот так можно? если нет то что исправить?

Код:
type
  TICQ = class(TThread)
  private
    UIN: string;
    Pass: string;
    N:integer;
    Client:TICQClient;
  protected
    procedure Execute; override;
end;

procedure TICQ.Execute;
begin
Client:=TICQClient.Create(nil);
with Client do
begin
UIN:=strtoint(UIN);
Password:=Pass;
Login;
OnLogin:=Form1.OnLogin;
OnMessageRecv:=Form1.MessageRecv;
OnAuthRequest:=Form1.AuthRequest;
Tag:=N;
end;
end;
(это черновичек если что, чисто эксперементирую перед применением на деле)
TRIZER вне форума Ответить с цитированием
Старый 26.06.2010, 10:02   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

1. внутри потока безопасно работать только с теми объектами, про которые известно, что никто кроме него(потока) не использует. В это случае гарантированы их значения и доступность (время жизни).

2. Для того чтобы можно было бы уверенно работать с внешними объектами используется Synсhronize по сути это временная остановка процесса и переход в основной поток для выполнения указанных действий.

3. внутри потока не действует цикл обработки сообщений windows. Все сообщения отправляются основному потоку. Значить нельзя использовать те компоненты, которые пользуются для своей работы такими сообщениями. Точнее-то можно но для этого придется использовать synhonize что приводит к абсурду: использовать дополнительный поток, чтобы работать в основном (смотри предыдущее замечание).

4. Основная задача потоков: выполнение длительных по процессорному аремени операций чтобы приложение не выглядело повисшим и пользователь мог делать полезную работу.

Код:
ype
  TICQ = class(TThread)
  private
    UIN: string;
    Pass: string;
    N:integer;
    Client:TICQClient;
  protected
    procedure Execute; override;
   procedure OnThLogin; //параметры в соответвии стребованиями
   procedure ThMSg;
   procedure ThRequest;
end;

procedure TICQ.Execute; 
begin
Client:=TICQClient.Create(nil); //можно но см п 3
with Client do
begin
UIN:=strtoint(UIN);
Password:=Pass;
Login;
OnLogin:=Form1.OnLogin;  //OnTHLogin;
OnMessageRecv:=Form1.MessageRecv; //ThMSg;
OnAuthRequest:=Form1.AuthRequest; // ThRequest;
Tag:=N; 
end;
end;  // здесь нет цикла так время выполнения ~0 и поток закончит работу (цикл обработки сообщений см.4, 3 )
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.06.2010 в 10:13.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоками den49 Помощь студентам 0 06.10.2009 14:52
Работа с потоками Нюська Общие вопросы Delphi 3 27.05.2009 00:52
Работа с потоками Neymexa Общие вопросы .NET 16 23.04.2009 17:42
работа с потоками Alex_Pro Общие вопросы .NET 1 01.07.2008 07:25
C++, работа с потоками mat90x Помощь студентам 20 15.05.2008 22:20