Форум: "Основная";
Текущий архив: 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