Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
ВнизПотоки Найти похожие ветки
← →
Аноним (2004-03-04 15:03) [0]Создаю поток (описанный во внешнем модуле), запускаю, а он зараза вешает прогу до завершения своего Execute.
Как сделать, чтобы не вещал?
← →
Юрий Зотов © (2004-03-04 15:06) [1]> Как сделать, чтобы не вещал?
Два способа - либо сделать Execute пустым, либо устранить ошибку. Обычно она находится в 17-й строке.
← →
Внук © (2004-03-04 15:06) [2]Убрать Synchronize, наверно :)))
← →
pasha_golub © (2004-03-04 15:07) [3]Либо код показать
← →
Аноним (2004-03-04 15:11) [4]procedure TMyThread.Execute;
var
Client: TTcpClient;
Connect: boolean;
begin
Client := TTcpClient.Create(nil);
Client.RemoteHost := "кому-то там";
Client.RemotePort := "куда-то там";
Connect := false;
try
while (not Terminated) do begin
try
if Client.Connect then begin
{...}
break;
end;
except
if not(ExceptObject is EAbort) then
Synchronize(Client.Disconnect);
end;
end;
finally
Client.Free;
end;
end;
← →
Аноним (2004-03-04 15:27) [5]Дык, как?
← →
Семен Сорокин © (2004-03-04 15:33) [6]отладка не помогает?
а что здесь: {...}
← →
Юрий Зотов © (2004-03-04 15:34) [7]Жмем F1 и видим, что в Synchronize должен указываться метод ПОТОКА. А не Client.Disconnect.
← →
Digitman © (2004-03-04 15:40) [8]а зачем здесь Synchronize() применен ?
и вообще ... у меня нет описания класса TTCPClient, и что-то непонятно, то ли Connect - это свойство, то ли метод ... обращаешься ты к нему как-то фривольно) ...
> до завершения своего Execute
и при каком условии, по твоему, этот Execute завершается ? И корректно ли завершается ? И где внешний блок try..except в теле Execute ? На каком основании ты предполагаешь, что ты вовремя обрабатываешь ВСЕ потенциально возможные исключения в Execute ?
← →
Аноним (2004-03-04 15:40) [9]TO
Т.е. так?
type
TMyThread = class(TThread)
Client: TTcpClient;
procedure Execute;
procedure Disconnect;
end;
implementation
procedure TMyThread.Disconnect;
begin
Client.Disconnect;
end;
procedure TMyThread.Execute;
begin
Client := TTcpClient.Create(nil);
Client.RemoteHost := "127.0.0.1";
Client.RemotePort := "25";
try
while (not Terminated) do begin
try
if Client.Connect then begin
{здесь пока ничего нет}
break;
end;
except
if not(ExceptObject is EAbort) then
Synchronize(Disconnect);
end;
end;
finally
Client.Free;
end;
end;
Не работает. Тож же эффект.
← →
Reindeer Moss Eater © (2004-03-04 15:45) [10]Наверняка в главном потоке сделано что - то вроде:
Thread:=CreateMyThread;
Thread.WaitFor;
Вот он и "вешается" на все время Еxecute
← →
Verg © (2004-03-04 15:48) [11]
> Юрий Зотов © (04.03.04 15:34) [7]
> Жмем F1 и видим, что в Synchronize должен указываться метод
> ПОТОКА. А не Client.Disconnect.
Вообще sync-у плевать, если помнится, что там за метод - сделает все равно, главное, чтобы был procedure of object.
← →
Аноним (2004-03-04 15:49) [12]TO Reindeer Moss Eater
Нет. Все просто...
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThread := TMyThread.Create(true);
MyThread.Execute;
end;
← →
Reindeer Moss Eater © (2004-03-04 15:52) [13]MyThread.Execute;
?!
Действительно просто.
← →
Verg © (2004-03-04 15:52) [14]
> Аноним (04.03.04 15:49) [12]
> TO Reindeer Moss Eater
>
> Нет. Все просто...
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> MyThread := TMyThread.Create(true);
> MyThread.Execute;> end;
:))))))
Изивите, нет времени....
← →
Digitman © (2004-03-04 15:53) [15]
> Аноним (04.03.04 15:49) [12]
все ясно)
> MyThread.Execute;
это зачем ?
просто
MyThread := TMyThread.Create(False);
← →
Reindeer Moss Eater © (2004-03-04 15:53) [16]В каком полку ... В какой автошколе программировать учились?
← →
Аноним (2004-03-04 15:55) [17]Сдурил.... Извините, что отнял так много времени....
← →
Аноним (2004-03-04 15:56) [18]Еще разок.... вылетает "Abstract Error"
← →
Reindeer Moss Eater © (2004-03-04 15:57) [19]Не сотвори себе экземпляров абстрактных классов
← →
Аноним (2004-03-04 16:00) [20].....Это какие? (я уже ничего не понимая, у меня истерика)
← →
Семен Сорокин © (2004-03-04 16:02) [21]Аноним (04.03.04 15:56) [18]
Еще разок.... вылетает "Abstract Error"TMyThread = class(TThread)
public
procedure Execute; override;
end;
← →
Digitman © (2004-03-04 16:04) [22]
> у меня истерика
у меня тоже
по поводу того, что человек в принципе не читает док-цию и. что еще печальней, занимаясь не самыми тривиальными задачами в программировании под Win32, не владеет элементарными навыками трассировки/отладки своих приложений
← →
Аноним (2004-03-04 16:09) [23]TO Digitman ©
>> элементарными навыками трассировки/отладки своих приложений
а как Вы на debug"ере отловите эту ошибку, интересно....
← →
Семен Сорокин © (2004-03-04 16:10) [24]а как Вы на debug"ере отловите эту ошибку, интересно....
молча
← →
Внук © (2004-03-04 16:11) [25]Вот набросились на человека :))
← →
Аноним (2004-03-04 16:13) [26]TO Семен Сорокин ©
Я рад за Вас, но у меня этого не получилось.
← →
Семен Сорокин © (2004-03-04 16:17) [27]Аноним (04.03.04 16:13) [26]
ладно не нервничай, отключи оптимизацию в св-вах, сделай билд проекта. Поставь точку останова, запусти, после останова - пошагово (F8), можешь пользоваться дополнительными окнами View->Debug windows.
В случае ошибки вызови Call Stack (Ctrl+Alt+S) посмотри метод, в котором отвалился.
Попробуй - должно получиться.
← →
Digitman © (2004-03-04 16:21) [28]
> а как Вы на debug"ере отловите эту ошибку, интересно....
какую ? конкретно ?
← →
Аноним (2004-03-04 16:21) [29]To Семен Сорокин © [27]
Спасибо.
← →
имя (2004-03-05 01:38) [30]Удалено модератором
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.04 c