Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2011, 19:27   #11
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

А зачем тут вообще синхронизация? Самые затратные вычисления в этом коде это перерисовка грида, а она все равно должна выполнятся в главном потоке. И зачем тут эти sleep-ы?
eduard93 вне форума Ответить с цитированием
Старый 04.04.2011, 04:30   #12
RobSys
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от eduard93 Посмотреть сообщение
А зачем тут вообще синхронизация?
Синхронизация здесь чисто в качестве закрепления теоретического материала.
Цитата:
эти sleep-ы
здесь для визуальной наглядности того, что синхронизация работает корректно.
RobSys вне форума Ответить с цитированием
Старый 04.04.2011, 04:39   #13
RobSys
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Судя по объявлению
Код:
function WriteData3 (p: pointer): longint; stdcall;
это - некая поточная ф-ция.
Да. Это поточная функция (все 4 функции здесь поточные).
Цитата:
В ее теле я в упор не вижу никакой синхронизации.
Как не видите синхронизации в ее теле? о_О А устанавливаемый в сигнальное состояние объект E1? (Подсчет среднего арифметического строки и вписывание его во второй StringGrid происходит сражу же после завершения заполнения третьего столбца первого StringGrid)

Последний раз редактировалось RobSys; 04.04.2011 в 04:42.
RobSys вне форума Ответить с цитированием
Старый 04.04.2011, 16:38   #14
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Неудачный вы себе пример выбрали. С VCL контролами надо работать через Synchronize! А вся ваша синхронизация сводит выигрыш от использования потоков к нулю потому что получается, что одновременно может работать только два потока - основной и один из дополнительных (если я правильно разобрался в этой каше).
eduard93 вне форума Ответить с цитированием
Старый 04.04.2011, 22:01   #15
RobSys
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от eduard93 Посмотреть сообщение
Неудачный вы себе пример выбрали.
Выбирал пример себе не я: было дано задание, причем не уточналось, как реализовывать: через класс TThread или же через средства API.
Цитата:
С VCL контролами надо работать через Synchronize!
Возможно. Спорить не буду.
Цитата:
А вся ваша синхронизация сводит выигрыш от использования потоков к нулю
В данном случае синхронизация нужна не для выигрыша в быстродействии, а для того, чтобы приложение не упало - т.е. не было считывания и перевода в вещественный тип из строки с незаполненным столбцом (-ами).
RobSys вне форума Ответить с цитированием
Старый 04.04.2011, 22:20   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
т.е. не было считывания и перевода в вещественный тип из строки с незаполненным столбцом (-ами).
это вообще то делается с помощью try except end
исключения ловить надо, а не игнорировать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2011, 22:24   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
как реализовывать: через класс TThread или же через средства API
коли работаете с VCL то и используйте её синхронизацию(блокирующую) или же можете написать иной вариант(но не тот что у вас)

помните одну вещь, помимо дополнительных потоков, есть главный поток, который тоже надо блокировать на момент обращения к компонентам, именно это синхрониз и делает
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2011, 22:26   #18
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Цитата:
Выбирал пример себе не я: было дано задание, причем не уточналось, как реализовывать: через класс TThread или же через средства API.
Дело ваше, но если это было тестовое задание то за Synchronize могут снять балы.
eduard93 вне форума Ответить с цитированием
Старый 05.04.2011, 04:00   #19
RobSys
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
это вообще то делается с помощью try except end
Причем здесь try except end, когда задание было на использование синхронизации?
Цитата:
исключения ловить надо, а не игнорировать.
Никто и не игнорирует исключения - с помощью синхронизации потока, отвечающего за среднее арефметическое я, просто, не довожу "дело" до исключительной ситуации.
Цитата:
коли работаете с VCL то и используйте её синхронизацию(блокирующую) или же можете написать иной вариант(но не тот что у вас)

помните одну вещь, помимо дополнительных потоков, есть главный поток, который тоже надо блокировать на момент обращения к компонентам, именно это синхрониз и делает
Спасибо. Я учту Ваш комментарий (хотя для меня не было секретом, что использование класса TThread вместе с Synchronize более корректно. Просто, мне было более понятно, как реализовать задачу так, как я ее реализовал). В конце концов, я же не коммерческую программу писал и, вообще, программой это назвать сложно - это учебное задание.

Думаю, что тему можно считать закрытой.
RobSys вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58
Потоки fredwriter Общие вопросы Delphi 20 13.11.2010 04:16
Потоки Coder86 Общие вопросы Delphi 12 09.06.2010 23:12
потоки пауэрлифтинг Общие вопросы Delphi 5 23.05.2010 14:19
Потоки StudeHt Помощь студентам 1 06.05.2010 16:26