Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
8-1069193214
Blacked
2003-11-19 01:06
2004.03.28
Замена TMediaPlayer на такой же с потдержкой DivX


1-1078398142
Rink
2004-03-04 14:02
2004.03.28
Где скачать примеры для компоненты Indy Clients для Delphi 7


1-1078946762
Lena19
2004-03-10 22:26
2004.03.28
DLL точка входа не найдена


7-1070382483
NavigatorV
2003-12-02 19:28
2004.03.28
Выход из Windows


3-1077470135
Vah
2004-02-22 20:15
2004.03.28
Подключение к MySQL через dbExpress





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