Главная страница
    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
3-88385
HAZARD
2002-05-04 00:55
2002.05.27
Ну вот и столкнулся :(


14-88619
lipskiy
2002-04-18 23:44
2002.05.27
Все, отправившие и отправящие записи в UBPFD, проконтролируйте!


14-88630
Иван Шихалев
2002-04-19 23:07
2002.05.27
Поздравляю evgeg а с днем рождения его кумира.


6-88590
alexta
2002-03-16 09:16
2002.05.27
Как узнать размер файла для закачки (по URL)?


14-88627
DRUG
2002-04-19 17:59
2002.05.27
Regedit





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