Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Synchronize   Найти похожие ветки 

 
Тимохов ©   (2004-07-05 14:58) [40]


> Тимохов ©   (05.07.04 14:56) [39]

да... я конечно очень оригнален со своим замечанием :)))))


 
Григорьев Антон ©   (2004-07-05 15:06) [41]


> Тимохов ©   (05.07.04 14:58) [40]
>
> > Тимохов ©   (05.07.04 14:56) [39]
>
> да... я конечно очень оригнален со своим замечанием :)))))


А я не буду оригинален с ответом: см. [19]. Я ведь до сих пор на пятёрке сижу.


 
Serginio666   (2004-07-05 15:29) [42]

В D7 реагирует на SetEvent

procedure SignalSyncEvent;
{$IF Defined(LINUX)}
const
 Dummy: Byte = 0;
var
 nRead: Integer;
{$IFEND}
begin
{$IF Defined(MSWINDOWS)}
 SetEvent(SyncEvent);
{$ELSEIF Defined(LINUX)}
 if (ioctl(SyncEvent.ReadDes, FIONREAD, @nRead) = 0) and (nRead = 0) then
   __write(SyncEvent.WriteDes, Dummy, SizeOf(Dummy));
{$IFEND}
end;

В procedure TApplication.WndProc(var Message: TMessage);
реагирует на сообщение
WM_NULL:
         CheckSynchronize;

и соответственно в CheckSynchronize снимает событие и выполняет нужный метод


 
Тимохов ©   (2004-07-05 16:17) [43]


> Григорьев Антон ©   (05.07.04 15:06) [41]

да понял я - уже прочел.

виноват - поспешил с соображением :))))


 
Mim1 ©   (2004-07-05 16:44) [44]


> [38] y-soft ©   (05.07.04 14:03)


Вот по этому его и не сделали. Можно сделать но с кучей оговорок и т.д. Лучше пользуйтесь PostMessage.


 
y-soft ©   (2004-07-05 20:12) [45]

>Mim1 ©   (05.07.04 16:44) [44]

Лучше пользуйтесь PostMessage.

А я обычно и пользуюсь :)

Хотя думал что-то над этой веткой и в принципе решил, что написать класс с Asynchronyze вполне смог бы... Время будет - может напишу и выложу :)


 
Mim1 ©   (2004-07-06 08:10) [46]


> [45] y-soft ©   (05.07.04 20:12)

Я конечно извиняюсь, а кто будет вызывать этот метод? да и вообще кому нужен метод в котором вы не можете обратится к полям обьекта, или метод для вызова которго нужно создать новый обьект.

> Время будет - может напишу и выложу :)

Лучше не тратьте его зря.


 
y-soft ©   (2004-07-06 15:23) [47]

>Mim1 ©   (06.07.04 08:10) [46]

Я конечно извиняюсь, а кто будет вызывать этот метод?

Вызывать его будет функция инструментального потока для того, чтобы просто уведомить поток GUI, что он должен выполнить какой-то метод в удобное для потока GUI время. Т.е. сделать то же, что делает Synchronize, но не дожидаясь, когда метод начнет выполняться

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

Насчет ограничений. В VCL и вообще в Windows существует их множество, но они как-то не мешают жить программисту. Теоретически ведь можно много чего сделать такого, что не приведет ни к чему хорошему и без всяких Asinchronize :)
Вы ведь наверняка не вызываете в конструкторе объекта его деструктор? И не делаете перерисовку TControl, если не назначен Parent? :)

К тому же я собираюсь написать не какой-то новый потомок TThread, а класс-оболочку для удобной работы сразу со множеством потоков (скорее всего наследую его от TWinControl, чтобы не надо было подменять оконную функцию главного окна). Причем прямого доступа у программиста к ним не будет, только через методы и свойства контейнера-родителя. Вместо виртуального Execute у каждого элемента (это будут потомки TCollectionItem) будет событие OnExecute, в котором Вы и будете вызывать по мере необходимости Synchronize и ASynchronize. Написанный в этом событии код и будет выполняться в функции потока. Заодно и поправлю недостаток TThread при работе с исключениями в функции потока...

Т.е. есть желание написать удобный компонент-оболочку для комфортной "визуальной" работы с потоками при написании VCL приложений. Кидаете его на форму, прямо в IDE содаете сколько надо потоков, назначаете им обработчики и все! И не более того :) IMHO для Delphi такой подход более естественен, чем написание каждый раз классов-потомков...


 
Ihor Osov'yak ©   (2004-07-14 04:05) [48]

моих две копейки. Мне кажется, синхронайз далеко не самое лучшее изобретение Борланда. Не раз приходилось наблюдать, как человек вмесо того, чтобы немного разобраться с sendmessage, postmessage, немного с обьектами синхронизации, начинал делать шаманские танцы вокруг синхронайз.. Причем, совсем не имея понятия, как это дело работает.. Причем на танцы идет много больще времени, чем собственно нужно для просветления в вопросах вокруг  send и postmessage.
Да, еще. И в большинстве случаев после просветления исчезает желание использовать синхронайз..


 
Ihor Osov'yak ©   (2004-07-14 04:09) [49]

сори, или что то с клиентом случилось, или со мной,  вытащил на верх ветку двухнедельной давности :-(.


 
Тимохов ©   (2004-07-14 11:18) [50]


> Ihor Osov"yak ©   (14.07.04 04:05) [48]


> Да, еще. И в большинстве случаев после просветления исчезает
> желание использовать синхронайз..

я его тоже перестал использовать, т.к. часто нужно сделать "синхронайз" не в гралный поток, а в другой. А для этого приходится писать свою реализацию. А если есть реализация сделать "синхронайз" в любой поток, то почему бы ее не спользовать и для главного потока, а на метод synchronize вообще забить.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.039 c
3-1088680527
Miguel1
2004-07-01 15:15
2004.07.25
Использование оперативной памяти при работе с ADO


4-1086984795
alienserg
2004-06-12 00:13
2004.07.25
Synchronize внутри DLL. Пытаюсь рисовать из треда на форме.


1-1089613460
Pavelkq
2004-07-12 10:24
2004.07.25
OpenDialog для группы файлов


14-1089103498
PVOzerski
2004-07-06 12:44
2004.07.25
MySQL + Apache - Аппаратные требования к компу.


1-1089493108
DDA
2004-07-11 00:58
2004.07.25
Узнать адрес процедуры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский