Форум: "Основная";
Текущий архив: 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