Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.046 c
2-1135582359
ksu
2005-12-26 10:32
2006.01.15
прозрачный фон TLabel


3-1131965689
Id
2005-11-14 13:54
2006.01.15
Ошибка при создании таблицы


14-1134839795
utter
2005-12-17 20:16
2006.01.15
Borland Developer Studio 2006: Создание приложений для КПК


8-1123614825
Ландграф Павел
2005-08-09 23:13
2006.01.15
Зацените програмку для копирования mp3


2-1135696721
dera
2005-12-27 18:18
2006.01.15
Как добавить поле в таблицу с помощью SQL?