Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.038 c
4-1086605735
Andrew
2004-06-07 14:55
2004.07.25
Посылка сообщений...


14-1088723413
Defen
2004-07-02 03:10
2004.07.25
глубиные ошибки


4-1086451369
parovoZZ
2004-06-05 20:02
2004.07.25
"TABStop" и манифест


14-1089231536
VEG
2004-07-08 00:18
2004.07.25
Где в Москве можно положить деньги на WebMoney?


1-1089435194
Ivolg
2004-07-10 08:53
2004.07.25
Процедуры и функциии