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

Вниз

Invalid Thread - где копать?   Найти похожие ветки 

 
AllDontFire   (2005-12-09 12:40) [0]

Привет Всем!
Есть программа в которой используется TTimer и компонента TUDP. В процессе работы программы через некоторое время может выдать сообщение "Invalid Thread ХХХХ$", при этом программа зависает, Ctrl-F2 не помагает, после этого приходится снимать задачу и перезапускать Delphi. Место, в котором произошла ошибка, не показывается (Дебуггер включен, настроен по умолчанию, Компилятору указаны все возможные проверки на Range, OverFlow  и т.д.). Махинаций с TThread нет. Если запускать программу не из среды, то есть Экзе, то этой проблемы нет. Тестировал довольно долго, в Delphi уже бы выдало ошибку, а так ничего не выдаёт, программа работает нормально.

Вопросы:
1)как можно отловить место, в моих модулях(Unit),в котором произошла ошибка. Ес-со, если будет указание на Application.Run или на модули подобные System, то толку не будет.

2)Решит ли проблему переход на более поздний Delphi, например, на пятый?


 
DVM ©   (2005-12-09 12:42) [1]


> и компонента TUDP

Это что за компонента такая?


 
AllDontFire   (2005-12-09 12:46) [2]

Передача сообщений по протоколу UDP.

// (c) 1g0r  " 2002
// mailto://1g0r@ukr.net

unit UDP;
interface
uses
 Windows, Messages, Classes, Forms, Winsock, SyncObjs;
const
 CM_SOCKETMESSAGE = WM_USER + $100;
type
 TOnDataReceived = procedure(Sender: TComponent; const Data: String; FromIP: string; Port: integer) of object;
 TOnError = procedure(Sender: TComponent; const ErrCode: Integer) of object;
 TCMSocketMessage = record
   Msg: Cardinal;
   Socket: TSocket;
   SelectEvent: Word;
   SelectError: Word;
   Result: Longint;
 end;
 TSockOptions = class;
 TUDP = class(TComponent)
 private
   FActive: Boolean;
   FLocalPort: Word;
   FRemotePort: Word;
   FRemoteHost: String;
   FHandle: TSocket;
   FWinHandle: THandle;
   FSession: TWSAData;
   FSocketLock: TCriticalSection;
   FOptions: TSockOptions;
   FOnDataReceived: TOnDataReceived;
   FOnReady: TNotifyEvent;
   FOnClose: TNotifyEvent;
   FOnError: TOnError;
 protected
   procedure WMSocket(var Message: TCMSocketMessage); message CM_SOCKETMESSAGE;
   procedure WinsockEvent(var Message: TMessage);
   procedure SetActive(Value: Boolean);
   procedure DoError;
 public
   procedure Lock;
...


 
Leonid Troyanovsky ©   (2005-12-09 13:08) [3]


> AllDontFire   (09.12.05 12:46) [2]

> // mailto://1g0r@ukr.net


Дык, спроси у автора.

--
Regards, LVT.


 
Defunct ©   (2005-12-09 13:08) [4]

AllDontFire   (09.12.05 12:40)  

Переходите лучше на D6 или D7, по двум причинам:
1. класс TThread там приведен в божеский вид.
2. добавлен набор компонентов Internet Direct (indy) в том числе имеется замечательный компонент для работы по UDP протоколу - TidUDPServer.


 
AllDontFire   (2005-12-09 18:03) [5]

Так дело в том, что:
1)Я написал более менее полноценный чат на этой компоненте, в котором этой ошибки никогда небыло, правда там не использутся сильно TTimer.
2)>>Дык, спроси у автора.
я так понял "invalid thread" это сообщение среды(delphi), а не компоненты, связанное с обращением к процессу которого уже нет. И меня интересует ссылка на место в моём коде, которое вызыdает эту ошибку, т.к. сейчас просто всё зависает; мне кажется этот не компонента TUDP выдаёт.
3)to Defunct. спасибо, конечно, но я ж хотел узнать решает ли ЭТУ проблему переход на более позднюю среду?


 
Alexander Panov ©   (2005-12-09 23:43) [6]

Defunct ©   (09.12.05 13:08) [4]
1. класс TThread там приведен в божеский вид.


Ну не знаю, не знаю... В D5 не встречался с глюками в TThread.


 
Defunct ©   (2005-12-10 00:36) [7]

Alexander Panov ©   (09.12.05 23:43) [6]

аналогично, но мало ли..
Вы же помните, что

constructor TMyThread.Create;
begin
 inherited Create( false);
 ...
end;

поведут себя по-разному в D5 и D6

AllDontFire   (09.12.05 18:03) [5]
> но я ж хотел узнать решает ли ЭТУ проблему переход на более позднюю среду?

Вполне возможно. В D4 помнится были баги компилятора. Как-то именно в D4 наткнуля на неверное поведение в оператора if.
образно говоря было что-то типа такого:

if a <> 4 then
 <оператор1>
else
 <оператор2>

при A = 4 отрабатывал <оператор1>


 
Alexander Panov ©   (2005-12-10 01:08) [8]

AllDontFire   (09.12.05 12:40)

Есть в среде Delphi то ли глюк, то ли еще что, но некторые программы из под IDE в режиме отладки выпалают с AV. Какой-либо закономерности я не заметил. Может быть у тебя подобная ситуация.


 
jack128 ©   (2005-12-10 01:15) [9]

Defunct ©   (09.12.05 13:08) [4]
1. класс TThread там приведен в божеский вид.


Это уродство ты называешь божеским видом??

Defunct ©   (10.12.05 0:36) [7]
поведут себя по-разному в D5 и D6

ну и что?? Я всегда всю инициализацию наследников TThread проводил ПЕРЕД вызовом inherited Create(...) и проблем не имел. И вообще эта доработка - мелочь по сравнению с тем, во что они превратили механизм синхронизации


 
Defunct ©   (2005-12-10 12:33) [10]

jack128 ©   (10.12.05 01:15) [9]

А можно без эмоций?


 
Игорь Шевченко ©   (2005-12-12 10:50) [11]

jack128 ©   (10.12.05 01:15) [9]


>  И вообще эта доработка - мелочь по сравнению с тем, во
> что они превратили механизм синхронизации


И во что же злобные Борланды превратили механизм синхронизации ?

Хинт: Начиная с D6, TThread начал присутствовать также в CLX.



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

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

Наверх





Память: 0.47 MB
Время: 0.018 c
9-1122972298
Max4
2005-08-02 12:44
2006.01.15
Координаты клика.


14-1134742530
Kerk
2005-12-16 17:15
2006.01.15
Архитектура Google


14-1134921404
Praetor
2005-12-18 18:56
2006.01.15
Воскресная задачка


1-1134121204
AllDontFire
2005-12-09 12:40
2006.01.15
Invalid Thread - где копать?


14-1135053187
Silky
2005-12-20 07:33
2006.01.15
Курсовая по СУБД





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