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

Вниз

Messages & TThread   Найти похожие ветки 

 
Digitman   (2002-07-30 13:37) [40]

>>Synchronize(SetSQLReady);

Зачем Synchronize ? С каким неразделяемым ресурсом ты работаешь в SetSQLReady() ? Не вижу ничего, кроме PostMessage()

Ну, это так , к слову ...

Вообще же - ну не вижу я никаких явных плюх ... Если дело до Dispatch() действительно доходит и в момент вызова код сообщения действительно равер константе PM_THREADCMD или PM_ENDTHREAD, то все должно работать !

Хорошо, пробуй на время вот такой (полноэквивалентный) заменитель Dispatch() :


While (Not Terminated) and GetMessage(lpmsg,0,0,0) Do
case lpmsg.Message of
PM_THREADCMD: PMThreadCmd(lpmsg.Message);
PM_ENDTHREAD: Terminate;


 
Lmatveev   (2002-07-30 13:49) [41]

Прошу прощения, если мой совет не в кассу, но я бы на вашем месте воспользовался пакетом GALA Library ( http://gurin.tomsknet.ru/gala.html). Там все, что касается работы с потоками уже реализовано, и вместо того, чтобы отлаживать системные функции, можно заняться программированием непосредственно функционала приложения


 
Dynamit   (2002-07-30 13:50) [42]

Вот на эту строку
PM_THREADCMD: PMThreadCmd(lpmsg.Message);
Компилятор дает такую ошибку:
[Error] UQThread.pas(114): Types of actual and formal var parameters must be identical

Т.е. получается, что lpmsg.Message имеет разный тип с TMessage?

А насчет

> Synchronize(SetSQLReady);

я думал убрать, да руки не доходят... как нибудь... или сейчас!
Спасибо за напоминание!


 
Digitman   (2002-07-30 14:02) [43]

Мда .....


PM_THREADCMD: PMThreadCmd( @lpmsg.Message);

Мне каждую очепятку свою исправлять ? Или таки доведешь до ума своими силами ? Взялся за API, а в типах - плаваешь ...


 
Dynamit   (2002-07-30 14:13) [44]


> PM_THREADCMD: PMThreadCmd(@lpmsg.Message);

Да я бы довел, но ведь и на эту строку та же ошибка!
Да и потом не понимаю я как это
message: UINT
будет одного типа с TMessage, а тем более адрес...
ну трудно мне это понять - вот и спрашиваю не боясь сойти за тупого !


 
Digitman   (2002-07-30 14:26) [45]

Вот проблема-то !(

Ну так тогда :

var
pMsg: PMessage;
...

While (Not Terminated) and GetMessage(lpmsg,0,0,0) Do
begin
pMsg := @lpmsg.Message
case lpmsg.Message of
PM_THREADCMD: PMThreadCmd(pMsg^);
PM_ENDTHREAD: Terminate;
end;
end;

PM_THREADCMD: PMThreadCmd(pMsg^);

>>не понимаю я как это

Ну ты сравни две структуры : TMsg и TMessage ! Они очень похожи !
а Dispatch() требует в кач-ве параметра просто адрес . Некий адрес, по которому находится некий UINT. Тот же некий адрес может быть интарпретирован тобой и как адрес структуры TMessage, ппо смещению +0 которой лежит тот же самый UINT


 
Dynamit   (2002-07-30 14:42) [46]

Все отработало на ОК!!

Так может быть сделать нечто похожее с Dispatch()???


 
Digitman   (2002-07-30 15:05) [47]

Dispatch() должен работать ! Просто обязан ! Иначе вся VCL и ее производные - коту, извините, под хвост ...

Эх, заглянуть бы в окно CPU у тебя при брейкпойнте на Dispatch() ! Все бы встало на свои места и "глюк" твой сразу бы вычислили в 2 счета .. А так - упаришься вычислять лажу ... Весь проект целиком нужно видеть ... и модуль с TQueryThread - в первую очередь ... чего-то ты недоговариваешь ..

Кстати, а не переопределил ли ты иным образом константу PM_THREADCMD в модуле, где декларирован класс TQueryThread ?

Ну , если ты настолько ленив, чтобы не копать до истины, бросай Dispatch() и делай case...of





 
Dynamit   (2002-07-30 15:54) [48]

У меня все константы определяются в DataModule и более нигде!

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

Вот только трудновато сейчас с AS/400 - жара, виснут паразитки.

А окно CPU можнопопробовать. Его когда дергать - прямо в момент брекпойнта на Dispatch()?


 
Digitman   (2002-07-30 16:21) [49]

Ну да) ... в момент брейкпойнта - когда ж еще ? Нужно ж выяснить, что реально происходит ... открывай system.pas на реализации TObject.Dispatch() - там всего-то дюжина строчек - шагай инструкция за инструкцией и контролируй, что ожидается и что есть на самом деле ... только так истина выясняется в таких смутных моментах !


 
Dynamit   (2002-07-31 09:37) [50]

Эх, далеко мы забрались, а проблема оказалась сверху!!

Шел я вчера с работы и думал, ну и понял вдруг, что QueryForm у меня тоже является объектом, а значит имеет метод TObject.Dispatch() !!! Так что пришел сегодня на работу, поставил
self.Dispatch() и все заработало как надо!!!!

Интересно, додумался бы я, если бы вчера не просматривал выполнение процедур в ассемблерном виде в дебаггере? Да еще реализацию Application.Run...

Ну вот вроде бы и все! Спасибо за помощь и науку - мне все, что здесь было сказано сильно пригодится!

Dynamit


 
Digitman   (2002-07-31 09:52) [51]

Упс !

А ведь ты прав !!!!
Я ведь тоже - вот тундра то !) - не обратил внимания на with QueryForm )))))

Ну молодец ! Что ж сказать еще ) ...



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

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

Наверх





Память: 0.55 MB
Время: 0.012 c
14-32019
ikivio
2002-09-14 06:30
2002.10.10
Хранение информации


1-31826
autumn_orion
2002-09-27 17:04
2002.10.10
Перевод строки символов из win в dos кодировку.


1-31737
maxim2
2002-10-01 08:23
2002.10.10
Подскажите где найти такой компонент


1-31715
Лана Розанова
2002-09-27 15:39
2002.10.10
TStringField


7-32034
ValeX
2002-08-01 15:27
2002.10.10
write/read COM port в Win2000 :(





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