Страница: 1 | 2 |
Вопрос: Вопрос по многопоточности
Добавлено: 05.05.07 13:06
Автор вопроса: s12
В общем дело такое:
Требуется вынести форму в отдельный поток, при этом контролы формируются из главной формы, по возможности реализовать надо без MDI?
Ваши предложения господа!
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
Alexandr.R
Вопросов: 9
Ответов: 115
Web-сайт:
Профиль | | #1
Добавлено: 05.05.07 16:53
А по подробнее
Номер ответа: 2
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #2
Добавлено: 05.05.07 17:32
Попробую конкретизировать сие деяние...
Имеется проект с несколькими формами активно использующий базу данных, фишка в том что количество записей в базе приближается к 10000
и очень часто возникает потребность одновременно выполнять поиск и редактировать найденное, при этом не блокируя базу для других пользователей (ADO.NET Forever , на мощных машинах все прекрасно работает, но самое заподлянское то, что приложение надо адаптировать на камушки 800 Мгц и менее.
Единственный способ ИМХО чтобы не блокировать интерфейс и поиметь относительно хорошее юзабилити вытащить форму поиска в отдельный поток.
Дело, мякго говоря, непростое.
И на сладкое: Каждая из записей обладает своим набором параметров (`30 почти всегда разный) и для редактирования требуется свой контрол, поэтому приходится вклинивать нужный контрол из главной формы.
ФУУУ подробней по моему некуда
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 05.05.07 17:57
Обычно все-таки сам поиск выносят в другой поток, а интерфейс оставляют в одном.
Номер ответа: 4
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #4
Добавлено: 05.05.07 18:04
Sharp:
А как же тогда работать с контролами???
Насколько я знаю работать из одного потока с контролами другого не очень то просто, если вообще возможно?
Номер ответа: 5
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #5
Добавлено: 05.05.07 18:20
Что сложного? Заводишь некий класс для межпотокового взаимодействия, например, и оборачиваешь изменение его состояния так, чтобы это было атомарной операцией.
Номер ответа: 6
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #6
Добавлено: 05.05.07 18:36
Не совсем понял. Какой-такой класс.
А на счет состояния: атомарными операциями в моем случае лучше не пользоваться, прога будет подвисать, камень то слабый.
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 05.05.07 19:37
Ничего сложного нету - просто все операции проводишь через Invoke.
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 05.05.07 22:28
Не вижу связи между использованием атомарных операций и тормозами на слабом камне. Синхронизация потоков - не .NET FW, все ресурсы не съест.
Номер ответа: 9
Автор ответа:
Lanback
ICQ: 271-209-305
Вопросов: 23
Ответов: 48
Профиль | | #9
Добавлено: 06.05.07 00:07
Выносишь сложную функцию в отдельный поток. Создаешь функцию-делагат, с помощью которой сможешь получать инфу с формы или изменять контролы. Потом из отдельного потока вызываешь так: control_name.Invoke(delegate_name). Функция delegate_name выполнится в том же потоке, в котором был создан контрол!
Номер ответа: 10
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #10
Добавлено: 06.05.07 12:02
To Sharp:
Синхронизация потоков вообще тема отдельная, ну да и хр...н с ними, с ресурсами. Сначала написать надо, оптимизация потом.
FAT (For attention of a thank.)
To Lanback:
Спасибо, я этого не знал. Обязательно попробую.
Номер ответа: 11
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #11
Добавлено: 06.05.07 19:11
Так или иначе FW должен будет и при invoke делегата атомизировать обращения к глобальным ресурсам, причем вряд ли он сделает это грамотнее, чем программист.
Номер ответа: 12
Автор ответа:
blinow
Вопросов: 0
Ответов: 5
Профиль | | #12
Добавлено: 19.05.07 17:56
А что разве на таком камешке NET будет прилично работать, я не заикаюсь даже про Celeronы, все равно какие тактовые, лучше не связваться, только Пни 4, а вы тут про 800 толкуете, причем тут БД просто голая форма хрен дождешся когда загрузится
Номер ответа: 13
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #13
Добавлено: 19.05.07 18:07
спорное утверждение
Номер ответа: 14
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #14
Добавлено: 19.05.07 18:08
Да сейчас уже давно все себе ставит "Кор 2"!
Номер ответа: 15
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #15
Добавлено: 19.05.07 23:01
Если бы это было не так, любой инвок ставил бы под угрозу многопоточную стабильность программы.