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

Вниз

Вопрос по потокам.   Найти похожие ветки 

 
iNew   (2003-10-09 12:17) [0]

Мне нужно из созданного мной потока вывести определенную информацию на главную форму проекта(в StringGrid)
Вопрос. Обязательно ли это делать через Synchronize и если да то как, потомучто если в Synchronize передать процедуру с параметрами то ругается:
Incompatible types: "TThreadMethod" and "procedure, untyped pointer or untyped parameter"


 
Radionov Alexey   (2003-10-09 12:24) [1]

Обязательно.

делаешь
procedure TMyThread.SendInfoToStrGrid;
begin
MainForm.Grid1....
end;

вызов -
Synchronize(SendInfoToStrGrid);


 
iNew   (2003-10-09 12:33) [2]

> Radionov Alexey
Дак я же говорю, что если сделать как ты покакзал то нормально,
а если так:
procedure TMyThread.SendInfoToStrGrid(Par:Integer);
begin
MainForm.Grid1....
end;

вызов -
Synchronize(SendInfoToStrGrid(1));
то ругаетя
Incompatible types: "TThreadMethod" and "procedure, untyped pointer or untyped parameter"


 
Radionov Alexey   (2003-10-09 12:38) [3]

>iNew © (09.10.03 12:33) [2]
Правильно ругается. Потому-что в Synchronize идут методы без параметров.
Придумай другой способ передачи параметров.


 
Семен Сорокин   (2003-10-09 12:40) [4]

делай процедуру без параметра, а объяви переменную в классе потока, и ее используй:

procedure TMyThread.SendInfoToStrGrid;
begin
MainForm.Grid1.... // используй myint
end;

вызов -
MyInt := 1;
Synchronize(SendInfoToStrGrid);


 
iNew   (2003-10-09 12:47) [5]

> Семен Сорокин
т.е. завести глобальную переменную, или как?


 
Digitman   (2003-10-09 12:53) [6]


> iNew


или как

представь себе, что более одного потока одновременно обратятся к этой переменной для записи параметра перед вызовом Synchronize(метод) . И что будет ? Бардак-с !

здесь два варианта.

первый (наилучший) - добавить для этой цели доп.поле у твоего поточного класса

второй (в принципе подходит, но лучше избегать его) - объявить глов.переменную не как VAR , а как THREADVAR


 
Skier   (2003-10-09 12:54) [7]

Digitman © (09.10.03 12:53) [6]
+
Можно ещё критическую секцию использовать.


 
Digitman   (2003-10-09 12:56) [8]

упс !

второй вариант не подходит никак, это я уж загнул)

т.о., только первый вариант дает нужный рез-т


 
Digitman   (2003-10-09 12:58) [9]


> Skier


да можно еще много чего начудить)


 
iNew   (2003-10-09 13:00) [10]

>Digitman
Большая просьба объяснить что значит:
добавить для этой цели доп.поле у твоего поточного класса
т.е. это в секцию private<b/>?

и почему второй способ лучше избегать?


 
Skier   (2003-10-09 13:00) [11]

>Digitman © (09.10.03 12:58) [9]
:)


 
Digitman   (2003-10-09 13:02) [12]


> iNew


да куда угодно ! но лучше в private ...
или в protected (для доступа к полю из наследников, если таковые планируются)


 
Анонимщик   (2003-10-09 13:20) [13]

Radionov Alexey
А с чего ты взял, что обязательно?


 
Radionov Alexey   (2003-10-09 13:27) [14]

>Анонимщик © (09.10.03 13:20) [13]
1. из вопроса "Мне нужно из созданного мной потока вывести определенную информацию на главную форму проекта(в StringGrid)"
2. из Help"a раздел "Using the main VCL/CLX thread"


 
Анонимщик   (2003-10-09 13:35) [15]

Поменьше глупостей читай
Я тебе такой код могу привести, что синхронайз только повредит. А почему? Потому что понимать нужно, что в нем делается, а что - нет.


 
Radionov Alexey   (2003-10-09 13:48) [16]

>Анонимщик © (09.10.03 13:35) [15]
Я не говорю, что его надо ставить всегда. Я говорю, что в ДАННОМ случае его надо ставить обязательно.

"Поменьше глупостей читай" - значит, хэлп написали для запудривания твоих светлых мозгов?

"Потому что понимать нужно" - если ты под этой фразой подразумеваешь что я не понимаю того, что пишу - обоснуй.


 
Анонимщик   (2003-10-09 13:57) [17]

А если в гриде нужно будет эти данные рисовать, а не строки писать? Тут, кстати, большой нюанс есть. Если большое желание узнать об этом, давай как-то позже по почте.
Борландовский хелп действительно написан для замутнения светлых мозгов.
Понимать нужно - значит в исходник посмотреть, а не помощью ограничиться.

К тебе лично претензий не имею, просто слишком безапеляционно, извини.


 
Radionov Alexey   (2003-10-09 14:08) [18]

>Анонимщик © (09.10.03 13:57)
"Понимать нужно - значит в исходник посмотреть, а не помощью ограничиться" - естественно :) И с чего ты взял, что я не видел исходников?
"просто слишком безапеляционно" - в контексте вопроса iNew не согласен. И читать/писать экскурсы в Synchronize нет желания за их ненадобностью.

Сорри за флейм :)
Немного не по себе от твоего предпоследнего ответа.


 
Анонимщик   (2003-10-09 14:10) [19]

Нет еще одного пункта - если выводить нужно изображение, а так все в порядке.
Человек не сказал ведь, что данные - текстовые.


 
Fantasist   (2003-10-10 09:32) [20]


> Нет еще одного пункта - если выводить нужно изображение,
> а так все в порядке.
> Человек не сказал ведь, что данные - текстовые.


Это уже выпендреж. Тут многие понимают, что происходит на самом деле.


> да можно еще много чего начудить)


Послать сообщение основному потоку с нужными данными. Никакого разделения данных, никакой синхронизации.


 
Анонимщик   (2003-10-10 12:35) [21]

Вот-вот.



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-74407
kaif
2003-10-06 11:31
2003.10.23
Как копировать текст через буфер обмена?


14-74431
Johnny Smith
2003-09-30 11:52
2003.10.23
---|Ветка была без названия|---


1-74267
Ptr
2003-10-11 14:00
2003.10.23
Параметры для TMessage


1-74228
Yakudza
2003-10-09 15:43
2003.10.23
Пытання


1-74123
Kein
2003-10-13 16:04
2003.10.23
работа с классом TIniFile





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