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

Вниз

Рисование из другог потока   Найти похожие ветки 

 
sapsi   (2003-05-22 11:53) [0]

Можно ли длительные вычислительные операции и рисование на paintbox основной формы выполнять из создаваемого второго потока?
Будет ли происходить тогда рисование? Или только вычисления?
Что нужно, чтобы запускаемый поток мог рисовать на форме?


 
Palladin   (2003-05-22 11:57) [1]

имхо как примерно организовать это в отдельном потоке:
Вычисляй как можно дольше, результаты вычислений заноси во временный массив или еще куда, после накопления данных до некоторого критического размера, выводи их на paintbox при помощи TThread.Synchronize, и расчитывай дальше... тоесть организуй что то вроде кеша...


 
AlexSV   (2003-05-22 12:02) [2]

Посмотреть пример Threads в Demos


 
Юрий Зотов   (2003-05-22 12:40) [3]

> после накопления данных до некоторого критического размера,
> выводи их на paintbox при помощи TThread.Synchronize,

И в это время вычисления стоят. Тогда зачем вообще второй поток?

Одна из стандартных схем:
- основной поток обрабатывает сообщения (в том числе, рисует);
- второй поток только считает и посылкой сообщения уведомляет первый, что новая порция данных готова (данные можно передавать в том же сообщении).


 
Palladin   (2003-05-22 12:42) [4]

да, точно, так будет лучше, когда их два...


 
sapsi   (2003-05-22 13:43) [5]

То есть рисовать из второго потока напрямую невозможно?


 
Palladin   (2003-05-22 13:47) [6]

возможно, я же сказал Synchronize, но смысл многопоточности теряется


 
sapsi   (2003-05-22 14:04) [7]

Тогда еще один вопрос.
Допустим, в потоке у меня процедура с параметрами.
Например DOsomething(const S: TStrings; const P: TPaintBox);
Могу ли я и как описать в методе Syncronize эти параметры. Без параметров не компилируется (ошибка: различаются списки параметров).
(В качестве параметров передается Paintbox и Memo), т.е.
так написать нельзя
synchronize(DOsomething(const S: TStrings; const P: TPaintBox))
так как в синхронизации вызывается процедура без параметров
и так тоже
synchronize(DOsomething); - так как здесь я ничего не передаю для расчета.
Как быть в таком случае?
Спасибо.


 
Palladin   (2003-05-22 14:12) [8]

начнем с этого: ты пример смотрел в справке?


 
yaJohn   (2003-05-22 16:42) [9]

>да, точно, так будет лучше, когда их два...
Только цикл обработки вин-сообщений (где и должно что-либо рисовать приличной программе) уже есть и поток для него создавать не надо :)
В свое время пробегало такое решение:
В ОнПаинт усыпляем (Suspend) поток, берем из него все что хотим и рисуем, после чего снова будим (Resume). Само собой во время рисования поток стоит, но этого трудно избежать, разве что перейти на многопроцессорную технику ;)
Для пущей красоты по таймеру говорим Репаинт.
Теоретически, с данными потока после Suspend можно работать.



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

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

Наверх




Память: 0.46 MB
Время: 0.007 c
1-2876
delfin
2003-05-22 12:55
2003.06.02
Подскажите как в TListView иконки засовывать.


14-3086
nizar
2003-05-14 04:50
2003.06.02
Forum Reader


1-2961
borg
2003-05-20 16:28
2003.06.02
run-time


1-2995
AlickSnegov
2003-05-21 15:29
2003.06.02
Подскажите пожалуйста как осуществлять поиск в TFileStream


3-2763
Razorblade
2003-05-13 23:44
2003.06.02
Подключение к БД MySQL из Delphi6





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