Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 714
от 18.04.2007, 19:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 474, Экспертов: 79
В номере:Вопросов: 3, Ответов: 7


Вопрос № 82279: Мужики!!! Помогите! Если кто помнит, то я пишу архиватор. Вопрос: при выполнении алгоритма заложеного в проге прога как бы на время подвисает, т.е. когда в процессе архивипрования пытаешься потаскать её по рабочему столу, то она тупит поку ал...
Вопрос № 82356: Здравствуйте. Я хочу сделать маленькую игрушку, и у меня вопрос, как в С++ можно поставить картинку-фон? Я пользуюсь Visual C++ 6.0. Буду благодарен за любую помощь....
Вопрос № 82452: Подскажите пожалуйста, как выгрузить dll из памяти? Если что можно и на Delphi....

Вопрос № 82.279
Мужики!!!
Помогите!
Если кто помнит, то я пишу архиватор. Вопрос: при выполнении алгоритма заложеного в проге прога как бы на время подвисает, т.е. когда в процессе архивипрования пытаешься потаскать её по рабочему столу, то она тупит поку алгоритм архивирования не закончит свое выполнение, как с этим бороться????
Отправлен: 12.04.2007, 20:26
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Lomer
Здравствуйте, Tatarin!
Архивацию нужно проводить в отдельном потоке.
Используйте для этого CreateThread();
Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 12.04.2007, 20:34
Оценка за ответ: 4
Комментарий оценки:
Понятно но инфы мало

Отвечает: Dr.Alex
Здравствуйте, Tatarin!
А можно просто в цикле архивации производить обработку сообщений Windows. Тогда окно будет таскаться по экрану и кнопки нажиматься.
Ответ отправил: Dr.Alex (статус: 10-ый класс)
Ответ отправлен: 13.04.2007, 10:42
Оценка за ответ: 3
Комментарий оценки:
а можно пример или ссылку!

Отвечает: V1s0r
Здравствуйте, Tatarin!

Это проблема известная. И у меня такая была (однажды я задавал даже похожий вопрос). Тормозится поток графического пользовательского интерфейса большими вычислительными расчётами (как твоя архивация).
По идее, надо сделать так, чтобы эти самые расчёты были в другом потоке и наладить взаимодействие между ними (потоками). Проще сказать, чем сделать. У меня есть примеры кода (из моих проектов), где это реализовано. Но я пишу на Qt.

Могу дать ссылку на пример, где реализовано то, о чём мы выше говорили:
http://doc.trolltech.com/4.2/threads-mandelbrot.html

Даже если ты не на Qt будешь писать, идею ты подхватишь, а это самое главное.

Удачи!
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 13.04.2007, 14:34
Оценка за ответ: 5
Комментарий оценки:
Все понятно, попробуем разобраться

Отвечает: Ilkras
Здравствуйте, Tatarin!
Ваша програма "тормозит" из за того, что вычисления (архивация) производятся в том же потоке, что и обработка событий GUI. Чтоб избежать этого - запустите вычисления в отдельном потоке и дайте ему пониженный приоритет. Для этого надо вынести все вычисления в отдельную функцию. Результат работы и исходные данные можно, для простоты, передавать через глобальные переменные (файл тоже можно рассматривать как глобальное данное). Для создания потока в Windows пользуйтесь CreateThread.
Ответ отправил: Ilkras (статус: 7-ой класс)
Ответ отправлен: 14.04.2007, 09:19
Оценка за ответ: 5
Комментарий оценки:
Спасибо, уже пытаюсь это делать.


Вопрос № 82.356
Здравствуйте. Я хочу сделать маленькую игрушку, и у меня вопрос, как в С++ можно поставить картинку-фон?
Я пользуюсь Visual C++ 6.0.
Буду благодарен за любую помощь.
Отправлен: 13.04.2007, 11:39
Вопрос задал: Kumold (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Базанов Иван Александрович
Здравствуйте, Kumold!
Предполагаю, что вся отрисовка будет выпольняться руками (обрабатывая WM_PAINT)
В таком случае нужно просто рисовать фон (возможно со сдвигом) перед отрисовкой всего остального...
---------
Disassemble your life and get the key
Ответ отправил: Базанов Иван Александрович (статус: 5-ый класс)
Ответ отправлен: 13.04.2007, 13:03


Вопрос № 82.452
Подскажите пожалуйста, как выгрузить dll из памяти? Если что можно и на Delphi.
Отправлен: 13.04.2007, 18:43
Вопрос задал: [C]RaSh (статус: 3-ий класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ross
Здравствуйте, [C]RaSh!

HINSTANCE hModule;
hModule = ::LoadLibrary("mydll.dll");

//-----code

FreeLibrary(hModule);
Ответ отправил: Ross (статус: 7-ой класс)
Ответ отправлен: 13.04.2007, 20:43
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь

Отвечает: Lomer
Здравствуйте, [C]RaSh!
Помимо получения хэндла модуля во время его создания, можно его узнать и во время исполнения, когда модуль находится в памяти.
HMODULE hDll=GetModuleHandle("DllName.dll");
...
FreeLibrary(hDll);

Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 13.04.2007, 21:10


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное