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

Вниз

TDataModule & mesages   Найти похожие ветки 

 
iskatel ©   (2005-09-16 07:37) [0]

есть длл, в ней запскаем поток из дллмайн, дальше в потоке, в execute:

создаем обьект класса, наследника датамодуле

while(GetMessage())

удаляем объект

проблема в том что при этом все напроч зависает на деструкторе датамодуле... (деструктор класса потомка работает)

если же без сообщений, для эксперимента выкидывал весь обработчик (в котором пока вообще ничего нет) то все ок...
пробовал заменить WM_QUIT на WM_USER+1 — та же фигня...
окон нет, вся очередь сообщений своя, крутится с пом PostThreadMessage, кода больше тоже никакого нет, обработчик пустой
что за фигня млин...


 
Defunct ©   (2005-09-16 08:27) [1]

что-то я не пойму.. ведь вся прелесть DataModule в том, что это объект у которого нет окна.. Как же ты собираешься принимать "оконные" сообщения без окон?


 
Defunct ©   (2005-09-16 08:31) [2]

> окон нет, вся очередь сообщений своя, крутится с пом PostThreadMessage

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


 
begin...end ©   (2005-09-16 08:39) [3]

> Defunct ©   (16.09.05 08:27) [1]

> Как же ты собираешься принимать "оконные" сообщения без
> окон?

А кто говорит об оконных сообщениях?


 
Defunct ©   (2005-09-16 09:14) [4]

begin...end ©   (16.09.05 08:39) [3]

поспешил с ответом...
Ваша правда, увидел что сообщения не оконные когда дочитал [0] до конца.

ps: без кода тут все равно ничего ответить нельзя...


 
iskatel ©   (2005-09-16 18:35) [5]

да нету кода, в тестовом примере было тока то что я написал, Defunct, смотри внимательнее, while(GetMessage())  для выборки ))

проблема оказлась не в мессажах, а в том что WM_QUIT я посылаю своему потоку из дллмайн при DLL_PROCESS_DETACH, похоже что при этом каким то образом отсоединяетсся подсистема COM от потока раньше чем отработает дллмайн, что собственно непонятно, т.к. пока не вернется дллмайн после DLL_PROCESS_DETACH дллка не отсоединяется, и соответственно не должны отсоединятся используемые ей длл... а так зависает не тока деструктор, но и все что пытается обратится к бд (ADO) валяющейся на этом датамодуле... как бы эту бяку обойти, мне при выгрузке нужно добавить коечто в базу+корректно завершить, причем сделать это именно из дллмайн, не делая для завершения отдельной ф-ции (смысла в которой кстати мало, т.к. посланное ей сообщение может не успеть обработаться до отключения)...

как бы это побороть?


 
Defunct ©   (2005-09-16 19:11) [6]

iskatel ©   (16.09.05 18:35) [5]

извини то все был утренний маразм, о чем очень сожалею.

> не делая для завершения отдельной ф-ции
Могу предложить помимо функции завершения, задача которой будет контроль завершения работы потока (возврат из функции только после успешного выполнения деструктора потока, соответственно отпадет и необходимость в реализации очереди сообщений), сделать еще и функцию начальной инициализации, которая будет создавать этот поток. Такой способ точно работает с ADO. Тогда отдельная функция завершения будет не такой уж бесполезной. Либо вариант 2, откажись от доп. потока.


 
iskatel ©   (2005-09-16 19:32) [7]

да ты не понял, очередь не для этого, структура такая:

длл - основной поток с очередью сообщений- куча потоков отслеживающих события и постящих сообщения в основной

все это прекрасно работает, основной отрабатывает эти сообщения и работает с базой, он запускается сразу из дллмайн, тока надо както отловить завершение всего этого (а оно происходит при закрытии проги, к которой подцеплена длл) чтоб записать чтото в базу, и все нормально деинициализировать... прога не моя, это типа плагина, запускается при пом CreateRemoteThread, так что вызвать какуюто ф-цию длл из той проги, да еще заставить ту прогу подождать отработку ф-ции не представляется возможным, а так прога может быть закрыта в любой момент, то...


 
Игорь Шевченко ©   (2005-09-16 20:38) [8]

iskatel ©   (16.09.05 19:32) [7]


> да ты не понял


А почему бы с первого раза вопрос не сформулировать так, чтобы всем было понятно ? Глядишь, и сам поймешь :)


> прога не моя, это типа плагина, запускается при пом CreateRemoteThread


И как оно, весь этот зоопарк еще и работать умудряется ? :)

Почему бы не сделать проще - в удаленном потоке посыласть сообщения окну программы (не DLL), которая программа и пишет в базу всякие там данные и прочее ?


 
iskatel ©   (2005-09-16 21:26) [9]

dll работает в контексте той проги, поэтому имеет доступ к ее данным, с отдельной прогой так не выйдет


 
Defunct ©   (2005-09-16 22:00) [10]

> dll работает в контексте той проги, поэтому имеет доступ к ее данным, с отдельной прогой так не выйдет

почему-то вспомнилась пословица:
кто ясно мыслит - тот ясно излагает..


 
Игорь Шевченко ©   (2005-09-16 22:11) [11]

iskatel ©   (16.09.05 21:26) [9]


> dll работает в контексте той проги, поэтому имеет доступ
> к ее данным, с отдельной прогой так не выйдет


Хуки же как-то работают ? И сообщения посылают, и данные.

Чего  творишь-то такое хитрое, поделись ?



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

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

Наверх





Память: 0.48 MB
Время: 0.016 c
1-1126774221
CaptainAlex
2005-09-15 12:50
2005.10.09
Хранение пароля


2-1125285887
-=snoop=-
2005-08-29 07:24
2005.10.09
ф-ия COPYFILE, не могу найти...


1-1127105063
Bonjovy
2005-09-19 08:44
2005.10.09
MDI-прога и запуск зарегенных за ней файлов


1-1127203933
_BIM
2005-09-20 12:12
2005.10.09
Подскажите как создать каталог.


1-1127272192
КиТаЯц
2005-09-21 07:09
2005.10.09
Отключить сообщение Debugger EConvertError





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский