Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];

Вниз

Опять треды   Найти похожие ветки 

 
roman_tutov@mail.ru   (2002-05-17 11:24) [0]

Прочитал я статью на сервере и по образу и подобию попытался
создать в тред в моей программе.
_________________________________________________________________

unit Tread1;
interface
uses
Classes,Klient;
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;
implementation

procedure TMyThread.Execute;
begin
while not Terminated do
Synchronize(DoWork);
end;

procedure TMyThread.DoWork;
begin

{
мой код
}

end;
end.
__________________________________________________________

Вызываю так из другого юнита


type
TMyThread = class(TThread);


var
T1 : TMyThread;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
T1 := TMyThread.Create(False);
end;
end;
__________________________________________________________
При вызове процедуры программа падает с "абстрактной ошибкой "
Прямо так и пишет "Abstract Errror in module...."

Что я сделал не так ?


 
Victor_Kozel   (2002-05-17 11:38) [1]

Посмотри как делается forward declaration для класса.
Включи в uses Tread1 и убери
type
TMyThread = class(TThread);




 
roman_tutov@mail.ru   (2002-05-17 11:41) [2]

Но сам тред должен лазить в unit Klient
И если я к основному юниту (klient)
подключить unit Tread1 по толучается
циклическая ссылка . Компилятор не пропускает


 
roman_tutov@mail.ru   (2002-05-17 12:44) [3]

Ура . Я победил сырость :)
Соединение с базой отрабатывается
отдельным процессом . Правда Остальная
программа в это время все равно замораживается :)
а почему не пойму :(


 
eSKey   (2002-05-17 13:50) [4]

А потому что почитай хелп по Synchronize - если у тебя процесс работает как в твоем примере.


 
roman_tutov@mail.ru   (2002-05-17 14:24) [5]

я почитал . Правда я так и не понял в чем ошибка.
Подскажите


 
roman_tutov@mail.ru   (2002-05-17 14:30) [6]

из хелпа

This example shows how to call a button’s click method in a thread-safe manner:

procedure TMyThread.PushTheButton;

begin
Button1.Click();
end;

procedure TMyThread.Execute;
begin
...
Synchronize(PushTheButton);
...
end;


 
NailS   (2002-05-17 14:50) [7]

У тебя получается что когда твой поток работает главный виток ждет, т.к. Synchronize реализована через SendMessage().


 
roman_tutov@mail.ru   (2002-05-17 14:57) [8]

Я хемп порыл и ничего понятного для себя не нашел .
Может можно пример кода ?


 
NailS   (2002-05-17 15:17) [9]

Тут как-то url проскакивал

http://compbooks.narod.ru/book_files/TOC.htm

Очень хорошая книга.
Одним словом - рекомендую.


 
eSKey   (2002-05-17 15:30) [10]

То-ли в мануале (DG.pdf), толи в хелпе написано насчет грамотного использования Synchronize. Смысл в том, что Synchronize нужон для не thread-safe объектов, и его слишком частое использование сводит преимущества многопоточности на нет. Собственно у меня в треде например Synchronize вообще не нужен и не используется, все ОК и очень быстро, правда размер данных невелик, будет время - проверю на чем-нибудь реально БОЛЬШОМ :)


 
panov   (2002-05-17 15:55) [11]

Метод Synchronize выполняется в контексте основного потока, поэтому, естественно, основной поток будет тормозиться...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
14-88637
Феликс
2002-04-17 21:37
2002.05.27
Opera?


1-88496
pavlowsk
2002-05-15 17:48
2002.05.27
Как осуществить движение мышки и имитировать нажатие на кнопку?


1-88480
Vladimir_Shk
2002-05-13 17:44
2002.05.27
Проблема с отладчиком.


14-88615
Val
2002-04-12 10:51
2002.05.27
---|Ветка была без названия|---


3-88316
Pelmen
2002-04-29 16:06
2002.05.27
Надоедливое окно ввода пользователя и пароля...





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