Показать сообщение отдельно
Старый 14.01.2011, 14:00   #1
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,804
По умолчанию Технология программирования сложных расчетов

Хотелось бы обменятся опытом по следующему интересному вопросу.

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

Также договоримся, что программа пишется под Windows с использова-
нием доступных элементов графического интерфейса пользователя, пре-
доставляемых как самой ОС, так и средой разработки GUI-приложений.

А теперь нюансы... Метод решения может оказаться не особо сложным
для понимания, а вот с вычислительной точки зрения очень трудоемким.
Соответственно, если расчет "долгий", то окно программы "умирает" на
время вычислений, никак не откликаясь на воздействия пользователя.

Соответственно, хотелось бы чтобы программа расчета умела следующее:

1) Не "умирать" при выполнении длительных расчетов и быть "отзывчивой".

2) Предоставлять возможность корректно прерывать расчеты в любой мо-
мент по желанию пользователя, при этом культурно подчищая все хвосты:
освобождая выделенные блоки памяти, закрывая открытые файлы и прочее.

3) Предоставлять возможность следить за текущим состоянием выполняемых
расчетов. В простейшем случае - процент завершенности. В более сложных
случаях - подробная детализация внутреннего состояния решаемой задачи.

У меня, разумеется, за годы выработался свой шаблон для подобных программ,
который, разумеется, включает использование отдельных потоков (thread), но
там есть свои подводные камни и нюансы, вот о них и хотелось бы поговорить.

P.S. Про распараллеливание самого метода решения здесь говорить не будем,
это уже совсем отдельная тема... долгая, нудная, многотомная и бесконечная.

P.P.S. Да чуть не забыл... Все вышеперечисленные "удобства" ни в коим случае
не должны сколь-либо существенно увеличивать общее время решения задачи.
Кроме того, главный поток не должен захлёбываться от прорвы Windows message.
Ну, и, наконец, обойти все случаи, приводящие к dead-lock (взаимоблокировке).

Последний раз редактировалось Paul Kellerman; 14.01.2011 в 14:38.
Paul Kellerman вне форума   Ответить с цитированием
Реклама