Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Разное > Исходники и статьи
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2012, 10:31
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,899
Репутация: выкл
По умолчанию [ Исходник ] - Передача сообщений между потоками

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

ЗЫЖ Забыл совсем, у меня EurikaLog установлен, так что у кого нет - удалите ExceptionLog из файла проекта.
ЗЗЫЖ Delphi XE
Вложения
Тип файла: 7z ThreadsMessages.7z (86.3 Кбайт, 37 просмотров)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.

Последний раз редактировалось Aristarh Dark, 26.10.2012 в 10:35.
Ответить с цитированием
  #2  
Старый 26.10.2012, 10:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

маленькое замечаньице:
правильней делать так:
Код:
constructor TMyThread.Create(AListBox: TListBox);
begin
  inherited Create(True);
  // init
  Resume;
end;
либо:
Код:
constructor TMyThread.Create(AListBox: TListBox);
begin
  // init
  inherited Create(False);
end;
теоритически Execute может начать раньше выполняться, чем "продолжение" конструктора. может и не в данном примере, конечно...
__________________
Пишу программы за еду.
__________________

Последний раз редактировалось NumLock, 26.10.2012 в 11:01.
Ответить с цитированием
  #3  
Старый 26.10.2012, 11:28
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,899
Репутация: выкл
По умолчанию

На самом деле нет. Поток создается с флагом CREATE_SUSPENDED и уже после отработки конструктора резюмится (или не резюмится, в зависимости от переданного параметра) в методе AfterConstruction.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 26.10.2012, 11:33
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Эта функа может вообще в любой произвольный поток послать?
Цитата:
Сообщение от Aristarh Dark
На самом деле нет. Поток создается с флагом CREATE_SUSPENDED и уже после отработки конструктора резюмится (или не резюмится, в зависимости от переданного параметра) в методе AfterConstruction.
Может же быть ситуация, что AfterConstruction заовверрайдили, а inherited забыли.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 26.10.2012 в 11:38.
Ответить с цитированием
  #5  
Старый 26.10.2012, 11:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от Aristarh Dark
На самом деле нет. Поток создается с флагом CREATE_SUSPENDED и уже после отработки конструктора резюмится (или не резюмится, в зависимости от переданного параметра) в методе AfterConstruction.
значит ты нам не тот исходник дал
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 26.10.2012, 11:42
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,899
Репутация: выкл
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Эта функа может вообще в любой произвольный поток послать?
Послать-то можно в любой произвольный, зная его ThreadID. Вопрос в том обработает, ли поток данное сообщение.

Цитата:
Сообщение от M.A.D.M.A.N.
Может же быть ситуация, что AfterConstruction заовверрайдили, а inherited забыли.
А могли вообще забыть описать Execute. ИМХО, тот у кого ума хватает овверрайдить AfterConstruction знает зачем этот метод.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 26.10.2012, 11:43
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,899
Репутация: выкл
По умолчанию

Цитата:
Сообщение от NumLock
значит ты нам не тот исходник дал
Посмотри исходник TThread, и вопросы снимутся.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #8  
Старый 26.10.2012, 12:10
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

да, каюсь, про AfterConstruction я прозевал с какой версии Они это изменили.

в примерах до сих пор:

Код:
{ TSortThread }

constructor TSortThread.Create(Box: TPaintBox; var SortArray: array of Integer);
begin
  FBox := Box;
  FSortArray := @SortArray;
  FSize := High(SortArray) - Low(SortArray) + 1;
  FreeOnTerminate := True;
  inherited Create(False);
end;

c:\Program Files\Borland\Delphi7\Demos\Threads\SortThds.pas
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter