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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.039 c
9-73954
Anton2000
2003-04-18 18:56
2003.10.23
Помогите !!!


1-74273
REA
2003-10-13 09:54
2003.10.23
Компилятор


11-74107
mdw
2003-02-07 17:00
2003.10.23
Checked в BitBtn


14-74378
Andryk
2003-09-18 11:55
2003.10.23
Точно говорят когда родился хохол еврей заплакал


14-74379
Real_Punk
2003-10-02 21:19
2003.10.23
Скины