2011-01-07 2 views
0

У меня есть база данных. представьте, что моя база данных имеет 1.000.000.000 записей или включает в себя данные 100 ГБ. Я хочу написать программу.использование ниток и рисунков

программа в основном отправит запрос в базу данных, чтобы принять 10 записей и отобразит эти записи на экране. тогда пользователь будет использовать полосу прокрутки на паузе, чтобы изменить отображаемые записи. например, когда программа прокрутки пользователя будет отображать записи между 2 и 11. Если пользователь продолжает прокручивать вниз, записи продолжают отображаться как между 3 и 12, 4 и 13 ... также пользователь может прокручивать вверх.

Как я могу использовать потоки в такой программе. может ли кто-нибудь дать общее представление об этом. также, если я хочу использовать шаблон, какой шаблон я могу использовать и почему?

примечание: я могу также использовать две кнопки (вверх и вниз) вместо полосы прокрутки.

+0

Вы сначала волнуетесь, как получить данные из Db таким образом. Забудьте о потоках. –

+0

Я закодировал раньше, чтобы сделать это. но, как я уже сказал, моя проблема заключается в том, как я буду использовать потоки и шаблоны с потоками. –

+1

Если у вас большое количество записей (10^9 - это много), вам нужно задаться вопросом, может ли использовать полосу прокрутки, потому что отображение разрешения между полосой прокрутки и записями настолько низкое, что полоса прокрутки имеет 1000 пикселей, поэтому каждый пиксель представляет 10^9/10^3 = 10^6 записей. Каждый раз, когда вы перемещаете полосу прокрутки, она скачет минимум на 1 миллион записей. Если у вас есть кнопки страницы, пользователю нужно нажать кнопку «вниз» 10^8 раз, чтобы добраться до нижней. Это займет некоторое время :) –

ответ

1

Типичным образцом является то, что один поток обрабатывает пользовательский интерфейс. Мышь, оконная обработка, рисование и т. Д.

Создается рабочий поток, который сделал фактический ввод/вывод БД. Этот поток будет собирать ответы из базы данных & поместить их в буфер (или отправить их по частям) в поток пользовательского интерфейса, который затем отобразит их по мере их поступления. В качестве альтернативы вы могли бы запросить поток пользовательского интерфейса для рабочего диапазона записей, поскольку пользователь работает с UI , и для этого требуется, чтобы рабочий ответил немедленно, даже если у него не было всех необходимых данных.

Во всяком случае, поддержание пользовательского интерфейса при выполнении работы является типичным шаблоном.

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

+0

благодарю вас за ваш ответ .. это кажется хорошей идеей .. я постараюсь найти больше информации о шаблоне, о котором вы упомянули .. должен ли я искать его как «рабочий шаблон»? –

+0

Извините, я не знаю формального имени для этого шаблона: это просто тот, который встречается обычно в приложениях стиля GUI. Например, я написал программу установки, в которой есть рабочий поток, который выполняет фактическую установку, в то время как пользовательский интерфейс показывает обновления статуса и остается полностью реагирующим на пользователя (и его можно отменить и развернуть). Аналогично, я написал серийное (com-port & parallel-port) программное обеспечение для передачи и приема, которое выполняет работу ввода-вывода в отдельных потоках из графического интерфейса. Это очень простой шаблон для обработки в Win32-программировании (и я думаю, что и в других средах ОС). – Mordachai

Смежные вопросы