Форум: "Основная";
Текущий архив: 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