![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация с основным тредом программы не из TThread
Дмитрий Белькевич © (2011-06-09 15:48:00)Добрый день. С синхронизацией из TThread, в целом, все понятно. Как сделать синхронизацию с основным тредом из треда, от которого есть только Idшник: GetCurrentThreadId?
Дмитрий Белькевич (2011-06-14 23:48:00) [21]
> и начал нести свою "правду матку"
Ну я там вроде бы ничего нигде не утверждал, только спрашивал.
sniknik (2011-06-14 23:39:00) [22]> Который там обсуждать никто не хотел ...
там тебе ОТВЕТИЛИ..., что ты проигнорировал, и начал нести свою "правду матку", в ответ проигнорировали тебя.
Дмитрий Белькевич (2011-06-14 23:36:00) [23]
> Правильно - сервер тоже переписывать.
По хорошему-то, конечно, было б неплохо на трубы или сеть переползти, но возни много с параметрами, с синхронизацией ответов. Пока оставлю как есть. Может быть позже перелезу на что-то другое, пока немного сроки поджимают, хочется быстрое решение.
Жалко готовых библиотек нет (или не нашел), пусть и платных. Совсем нет времени заниматься транспортом данных, особенно учитывая, что в единственном месте пригодится.
> то я вообще не вижу смысла в нашу эпоху все строить исключительно
> на технологиях MS.
Да я и сам стараюсь максимально обходится без технологий MS, насколько это возможно и оправдано.
Eraser (2011-06-14 23:23:00) [24]> [43] Дмитрий Белькевич (14.06.11 23:11)
Оно конечно красиво звучит - "клиент вызывает код сервера". Но вот я бы лично такое реализовывать никогда бы не стал. Разве что, ради спорт. интереса. Оставим эту прерогативу монстрам типа MS. Не проще ли сделать обычный TCP или Named Pipe обмен данными? Если рассуждать более глобально, то я вообще не вижу смысла в нашу эпоху все строить исключительно на технологиях MS. А вдруг завтра клиент под айфон срочно писать, что тогда? Правильно - сервер тоже переписывать.
Дмитрий Белькевич (2011-06-14 23:14:00) [25]>Все действия независимы
в том смысле, что может одновременно (из разных тредов) прийти несколько первых действий.
Дмитрий Белькевич (2011-06-14 23:11:00) [26]
> вопрос. какой именно функционал надо реализовать? т.е. какова
> задача?
Есть некоторое количество функций в сервере и в клиенте, которые должны вызываться клиентом и сервером.
Действие первое. Сервер вызывает процедуру клиента. Клиент через var параметр синхронно возвращает результат вызова.
Действие второе. Клиент вызывает функцию сервера. Сервер возвращает результат функции.
Все действия независимы, их несколько разных - штук 30 первых и штук 40 вторых. Действия от клиента могут вызывать ответные действия от сервера до окончания вызова от клиента. Некоторые из первых действий идут из разных потоков, вторые идут из главного потока. Траффик как по вызовам, так и по объему данных, в обе стороны незначительный.
> он считает, что уже все описал... -
Я считаю, что задал достаточно конкретный первый вопрос. То, что все менялось - результат продолжения обсуждения вопроса в com/corba. Который там обсуждать никто не хотел (это я не предъявляю, просто констатирую - нету времени у людей, и мне никто не должен, я понимаю).
sniknik (2011-06-14 20:35:00) [27]> Или связка COM клиент-сервер создаётся на каждый поток приложения?
само по себе ничего не создается, и то что ты в программе сделал хоть сто потоков, ни одного не создаст...
тебе не надоело абстракциями "швыряться"? мне попусту молоть уже да...
> Как на стороне сервера вызвать функцию клиента?
коллбек
> т.е. какова задача?
он считает, что уже все описал... -
>> Конкретный же вопрос.
при том, что методы о которых расспрашивает в ветке(2-х) уже раза четыре кардинально поменялись...
Eraser (2011-06-14 19:48:00) [28]> Дмитрий Белькевич
вопрос. какой именно функционал надо реализовать? т.е. какова задача?
Дмитрий Белькевич (2011-06-14 19:29:00) [29]
> если один экземпляр, "апартмент" тип вроде то да, но "мульти"
> это отдельный инстанс в каждом потоке/подключении.
У меня всегда может существовать только один инстанс сервера и клиента - это связка сервис-гуй - COM сервер (сервис) + иногда подключающийся COM клиент - гуй. То есть, как я понимаю, всегда будет один поток данных.
Или связка COM клиент-сервер создаётся на каждый поток приложения?
> прямой вызов функции и синхронно и ждет, и результат сразу.
> ..
Как на стороне сервера вызвать функцию клиента? Кроме событий я ничего не нашел.
Сейчас работает так:
COM сервер имеет COM интерфейс, через который его функции вызывает COM клиент.
COM сервер же через Events обращается к функциям клиента.
sniknik (2011-06-14 09:43:00) [30]> единомоментно COM передаёт только одно событие.
если один экземпляр, "апартмент" тип вроде то да, но "мульти" это отдельный инстанс в каждом потоке/подключении.
> Так как узкое место - не синхронизация с основным потоком.
естественно не она, она вообще не нужна. нужен цикл выборки.
> Всё таки удивительно, как люди дистанционно пытаются ставить кому-то диагнозы и говорить за других. Роды по интернету, чесслово.
вел бы себя по адекватнее, решал бы именно проблему/по подсказаному (либо сказал почему это не подходит), а не придуманное на ее основании. глядишь родов бы и не было...
> В этой же ветке, на найдя лучшего решения, спрашиваю совсем о другом:
не найдя? а ты пробовал???!!! тебе там прямым текстом, разве, что не код дали, и не найдя? прям матом хочется разговаривать...
> Учитывая, что мне нужно синхронно послать сообщение COM клиенту и дождаться от него ответа в виде результат обработки этого сообщения?
раз синхронно, и дождаться + в потоке, нафига вообще события? прямой вызов функции и синхронно и ждет, и результат сразу...
хотя, да понимаю, с учетом моих домыслов (инет родов) у тебя же основной поток виснет... да?
> Конкретный же вопрос.
без кода? это тебе только так кажется, что конкретный.
Дмитрий Белькевич (2011-06-14 09:16:00) [31]В этой же ветке, на найдя лучшего решения, спрашиваю совсем о другом:
"Как сделать синхронизацию с основным тредом из треда, от которого есть только Idшник: GetCurrentThreadId?"
Конкретный же вопрос. Ну нету у меня инстансов класса TThread в некоторых местах программы, что бы из этих инстансов синхронизироваться. Хорошо, что класс TThread умеет переключаться на основной поток, даже без собственного инстанса, без Self'а.
>вообще, как не единожды показа практика, такого рода синхронизаций, в т.ч. и из TThread лучше избегать, т.к. в итоге все равно придется переделывать потом по той или иной причине. чаще всего хватает OnTerminate или сообщений.
Хорошо, отказываемся от Synchronize, делаем сообщение. Что это меняет? Учитывая, что мне нужно синхроннопослать сообщение COM клиенту и дождаться от него ответа в виде результат обработки этого сообщения?
Дмитрий Белькевич (2011-06-14 09:03:00) [32]Пишу же:
"Все события клиента нужно обязательно синхронизировать? Или можно как-то без этого обойтись?"
Дмитрий Белькевич (2011-06-14 09:03:00) [33]
> т.е. идеал у тебя будет "шпыняемый" всеми пример Архангельского.
> ..
Всё таки удивительно, как люди дистанционно пытаются ставить кому-то диагнозы и говорить за других. Роды по интернету, чесслово.
Дмитрий Белькевич (2011-06-14 09:00:00) [34]
> смешно... буду теперь так админов у себя звать.
Если прав нету - то и мануал никак не поможет. Если права есть - и программа справится.
> в основном потоке цикл есть. и что? зачем тебе тогда поток?
> , если из-за цикла (мелочи в общем то) все "одеяло" туда
> перетягиваешь... работай тогда всегда в основном да и не
> парь мозг.
Обращение через основной поток к событиям COM занимает у меня от силы доли процента времени работы дополнительных потоков.
> т.е. идеал у тебя будет "шпыняемый" всеми пример Архангельского.
> .. (ну там где вся работа е в синзхроне), ни и, что, что
> тормозит типа, зато потоки используем...
Я же спрашиваю про варианты. Никто ничего другого пока не предложил. Найду что-то лучше - сделаю по-другому. Пока что оставлю как есть.
p.s. Подумалось... События через механизмы COM всё равно же будут последовательно проходить? То есть - куча потоков одновременно 'ломятся' послать событие, но, как ни крути, единомоментно COM передаёт только одно событие. Если так, то что ни делай - быстрее не будет. Так как узкое место - не синхронизация с основным потоком.
Германн (2011-06-14 02:13:00) [35]
> т.е. идеал у тебя будет "шпыняемый" всеми пример Архангельского.
> .. (ну там где вся работа е в синзхроне), ни и, что, что
> тормозит типа, зато потоки используем...
Таки да.
sniknik (2011-06-14 00:35:00) [36]> RunAs.
смешно... буду теперь так админов у себя звать.
> Работает, если сделать Synchronize.
в основном потоке цикл есть. и что? зачем тебе тогда поток?, если из-за цикла (мелочи в общем то) все "одеяло" туда перетягиваешь... работай тогда всегда в основном да и не парь мозг.
никакие сообщения, критические секции и т.д. аналоги, тебе тогда не пойдут, мог бы и не спрашивать "как лучше", только "переключение на работу в основном"...
т.е. идеал у тебя будет "шпыняемый" всеми пример Архангельского... (ну там где вся работа е в синзхроне), ни и, что, что тормозит типа, зато потоки используем...
Дмитрий Белькевич (2011-06-13 23:51:00) [37]
> а почему у них не программно?
Кто же знает - кому-то удобнее мануалы выпускать, чем программы. Мы стараемся сделать так, что бы пользователи минимально настраивали программы, насколько это возможно. Другие (точно знаю: так делают наши прямые российские конкуренты, не буду говорить, кто именно) умышленно делают программы так, что бы без их сервиса настроить (почти) невозможно было. У каждого свой подход.
> и как, если их нет.
RunAs.
> и скажи зачем ты приплел к этому синхронизацию. если там
> тебе сказали не работает из-за отсутствия цикла выборки.
>
Работает, если сделать Synchronize.
sniknik (2011-06-13 17:03:00) [38]> Какой там интеллект
замена админа программой...
> если по пунктам всё в мануале настройки расписано?
а почему у них не программно? если все так просто. и как будет делаться настройка прав, вернее зачем, если права уже есть
> Имея права, само собой.
и как, если их нет.
> Не понял о чем речь. В любом случае - байты везде одинаковые, и компьютер в принципе познаваем.
он познаваем... но не в том случае когда решая, что то конкретное, придумывают что-то абстрактное, и начинают это усиленно "познавать" ака выдумывать себе еще глуп... абстракций.
вот вернись к тому с чего начал,
> Уточняю. Вопрос возник по вот этой причине:
> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1306751915&n=8
и скажи зачем ты приплел к этому синхронизацию. если там тебе сказали не работает из-за отсутствия цикла выборки.
???
Дмитрий Белькевич (2011-06-13 15:39:00) [39]
> чуть "докрутишь" и готов искусственный интеллект...
Какой там интеллект, если по пунктам всё в мануале настройки расписано?
> p.s. ты из простой вещи сделал сложную... думаешь осилишь
> сложное не превратив его в невозможное?
Не понял о чем речь. В любом случае - байты везде одинаковые, и компьютер в принципе познаваем.
sniknik (2011-06-13 14:23:00) [40]> будет делать сам.
чуть "докрутишь" и готов искусственный интеллект... и нафига тебе "базовая" программа? бросай ее, займись сразу тем, что выгоднее. ("базовую" он тебе потом сам напишет...)
p.s. ты из простой вещи сделал сложную... думаешь осилишь сложное не превратив его в невозможное?