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

Вниз

Потоки   Найти похожие ветки 

 
Аноним   (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.028 c
8-1069221413
DAndrew
2003-11-19 08:56
2004.03.28
Как вращать строку с центром посредине строки?


1-1078905393
Lexer
2004-03-10 10:56
2004.03.28
Оценка программных средств


14-1077711896
Mystic
2004-02-25 15:24
2004.03.28
Работы Р. Пенроуза (атака тайны разума, ИИ)


3-1077696867
LaidBack
2004-02-25 11:14
2004.03.28
Есть-ли способ быстрее?


11-1056796781
Vladimir Kladov
2003-06-28 14:39
2004.03.28
Нужно связаться с Roman Vorobets