![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| dvamaster |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 30.6.2004 Где: Россия : Курган Репутация: 2 Всего: 10 |
Доброго времени суток!
Пишу DLL на Delphi с использованием интерфесов, но может использоваться и в .NET приложениях. Интересен вариант с .NET, точнее синхронизация потоков для GUI. В основном все функции будут работать посредством вызова их из .NET, тут проблем нет, поток будет главный, никакой синхронизации не нужно. Но будут Callback`и постоенные на интерфейсах (в DLL будут передаваться интерфейсы обертки классов .NET, вот методы этих интерфейсов и будут вызываться из потоков созданных DLL, эти методы в свою очередь будут работать с GUI). Насколько я знаю, в .NET обращение к GUI возможно в контексте потока самого GUI, через Invoke (как это постоено не понимаю).
Так вот интересует, понадобятся ли в .NET подобные манипуляции в любом случае, или можно этого избежать в рамках Delphi? Если понадобятся и можно решить в Delphi, то: 1. Хватит ли TThread.Synchronize? 2. Если использовать BeginThread, какие понадобятся действия? (более предподчтительно) 3. Если 1 и 2 не помогут, то как еще? -------------------- Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/ Что же я сделал не так? /Король Лир/ Я делаю это для твоего же блага! /Любой родитель и палач/ PKUNZIP.ZIP /неизвестный/ |
|||
|
||||
| dvamaster |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 30.6.2004 Где: Россия : Курган Репутация: 2 Всего: 10 |
читал, размышлял, экспериментировал... пиво рекой... Asynchronous Procedure Calls... в общем запутался... схема должна быть примерно такая: главный поток не знает что в нем будет выполнятся ассинхронно (или как-то еще) функции обратного вызова, работает и работает себе т.е. в нем нет и не будет WaitFor..., SleepEx и т.д. он вызовет StartProcess из DLL и все. вторичный поток (рожден в StartProcess) ждет данные, читает в буфер, вызывает ассинхронно (или как-то еще) в контексте главного потока функцию обратного вызова функция обратного вызова переваривает данные, очищает буфер, рисует в GUI нужно чтоб программист, ваяющий клиента этой DLL, не парился насчет языка (интерфейсы рулят) и не выполнял лишние действия (синхронизация с потоками DLL, о которых он и понятия не имеет) Это сообщение отредактировал(а) dvamaster - 12.11.2011, 20:10 -------------------- Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/ Что же я сделал не так? /Король Лир/ Я делаю это для твоего же блага! /Любой родитель и палач/ PKUNZIP.ZIP /неизвестный/ |
|||
|
||||
| dvamaster |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 559 Регистрация: 30.6.2004 Где: Россия : Курган Репутация: 2 Всего: 10 |
чтож испытания закончились крахом
придется заставлять разрабов, что будут использовать DLL, самим выполнять синхронизацию потоков. При реализации Callback-методов им придется учитывать, что часть из них будет вызываться из других потоков. Если что пишите. Это сообщение отредактировал(а) dvamaster - 13.11.2011, 18:45 -------------------- Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/ Что же я сделал не так? /Король Лир/ Я делаю это для твоего же блага! /Любой родитель и палач/ PKUNZIP.ZIP /неизвестный/ |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |