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

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


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

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

Выпуск № 767
от 12.06.2007, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 477, Экспертов: 58
В номере:Вопросов: 4, Ответов: 11


Вопрос № 90255: возможно ли на с++ для win32 обрабатывать какоето событие менее чем за 1 милисекунду (таймер или что-нибудь подобное). если можно то как...
Вопрос № 90274: Здравствуйте, эксперты! Помогите, пожалуйста, с решение задачи: Реализовать 2 шаблона классов. В первом из них содержится числовой массив, во втором переменная и функция, выполняющая изменение знака отрицательных элементов массива и...
Вопрос № 90323: Недавно начал свое ознакомление с языком microsoft visual C++ MFC возникла необходимость вывода на экран чисел формата float, но вот незадача, выводяться они со слишком большим количеством знаком после запятой, как уменьшить это количество знаков пос...
Вопрос № 90360: Среда разработки: Microsoft Visual C++ Модуль: MFC На панели у меня Edit Box, в котором(m_e1) float , также на панеле List Box, необходимо перекинуть значеия из Edit в List Box ...

Вопрос № 90.255
возможно ли на с++ для win32 обрабатывать какоето событие менее чем за 1 милисекунду (таймер или что-нибудь подобное). если можно то как
Отправлен: 06.06.2007, 11:34
Вопрос задал: Artx (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Qazzy
Здравствуйте, Artx!
В винде многое, связанное со временем, исходит из величины кванта времени, выделяемого для текущего потока. Почитай http://www.cybersecurity.ru/manuals/os/palm/728.html. Если ты хочешь каждую миллисекунду делать какое-то действие, то необходимо учесть, что само это действие будет инертным и займет от 1 до неск. млн миллисекунд, в зависимости от ПК и ОС. Очень трудно распределить это во времени. Нужно чтобы приоритет у разрабатываемой программы был самый высокий, чтобы отслеживать очень малые промежутки времени - инача винда просто не будет "давать" процессорное время твоей проге. Виндовый таймер кривоват малость - погрешность +/-10 мс точно. Юзать время оптимальнее ассемблером. Винда юзает его через дрова, он есть у тебя в системе. Сам системный таймер находится в чипсете (в северном мосту и называется так для Intel-based плат ICH далее номер семейства чипсетов LPC Controller ). Поищи в нэте материалы по асму и функциям для работы со временем через него, а то сходу даже и не вспомню их названия :)
Ответ отправил: Qazzy (статус: 1-ый класс)
Ответ отправлен: 06.06.2007, 16:12

Отвечает: Виктор Пырлик
Здравствуйте, Artx!
Для Win32 это не реализуемо. Данная система не отвечает требованиям жесткого времени. Другими словами - система сама принимает решения, когда и сколько дать времени вам, даже для инициализации переменной... Не говоря уж о фиксированном требовании ко времени исполнения (отклика). Эта проблема решается в СРВ, например QNX - а в Win32 реально ~1 сек гарантировать.

---------
Надо пребывать господа, пребывать! Иначе ничего не получится!
Ответ отправил: Виктор Пырлик (статус: 3-ий класс)
Ответ отправлен: 06.06.2007, 19:31

Отвечает: Ilkras
Здравствуйте, Artx!
за какое время можно обработать событие - зависит от скорости процессора.
установить таймер можно с точностью до 10 миллисекунд на win/x86, на других процессорах эта цифра может быть другой. соответсвенно timeslice даваемый операционной системой кратен 10 миллисекундам.
можно измерять время с точносью большей чем 10 мс. если необходимо генерировать какие то события с частотой выше 10 мс - можно создать процесс с высоким приоритетом и в нем в busy wait отсчитывать нужные интервалы времени.
irq latency windows NT - примерно 20-30 мс, на быстрых процессорах может быть и меньше.
на каком языке вы пишете - роли не играет.
Если вы зададите вопрос поточнее - можно будет дать ответ поконкретнее.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 06.06.2007, 19:38

Отвечает: Новак Александер Васильевич
Здравствуйте, Artx!
Чтото все забули про MMTimer, реализован в Winmm.dll библиотеке, он работает побыстрее стандартного, но насколько?....
В общем попробую вот описания Api правда под Pascal. ПОПРОБУЙ !!!!
Предпочитю Его!!!!
Конечно если что-то посерьзней, создю отдельный “поток” в REAL TIME!!!!

Приложение:

Ответ отправил: Новак Александер Васильевич (статус: 1-ый класс)
Ответ отправлен: 06.06.2007, 20:24


Вопрос № 90.274
Здравствуйте, эксперты!

Помогите, пожалуйста, с решение задачи:

Реализовать 2 шаблона классов. В первом из них содержится числовой массив, во втором переменная и функция, выполняющая изменение знака отрицательных элементов массива и вычисляющая сумму элементов массива. Вычисленное значение заносится в переменную.
Отправлен: 06.06.2007, 14:26
Вопрос задал: Ковалев Антон Сергеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Ковалев Антон Сергеевич!
Реализация классов и пример работы с ними в приложении...

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 07.06.2007, 02:48


Вопрос № 90.323
Недавно начал свое ознакомление с языком microsoft visual C++ MFC возникла необходимость вывода на экран чисел формата float, но вот незадача, выводяться они со слишком большим количеством знаком после запятой, как уменьшить это количество знаков после запятой
Отправлен: 06.06.2007, 19:12
Вопрос задал: Kudzury (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ilkras
Здравствуйте, Kudzury!
printf("%5.4f ", float_number); напечатает что-нибудь типа "3.1415"
кроме того:
1) язык называется С++
2) MFC - библиотека классов от Microsoft
3) неплохо почитать help к функции которой вы пользуетесь для вывода
4) еще лучше в вопросе написать что вы сделали, что получилось и что хотелось
5) удачи
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 06.06.2007, 19:48

Отвечает: Терсков Сергей
Здравствуйте, Kudzury!
В MFC есть класс для работы со строками CString. У этого класса есть функция Format. Работает она как и обычный printf(), только результат записывает в вызывающий объект. Поэтому ей можно воспользоваться для решения вашей проблемы. Например:

CString str;

double f = 3.141592653589;

str.Format("%.4f", f);

теперь объект str содержит строку "3.1415".
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 07.06.2007, 02:58

Отвечает: ramok
Здравствуйте, Kudzury!

если использовать стандартную библиотеку ввода/вывода, то можно воспользоваться стандратными
манипуляторами:
float num=15.839;
cout << "num = " << setprecision(2) << num;
вывод
num = 15.84

http://web.cs.wpi.edu/~cs1005/common/floatformats.html
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 07.06.2007, 10:31

Отвечает: _Solo_
Здравствуйте, Kudzury!

Также, как и в обычном C. Перед выводом на экран число (пусть это переменная fMyVar) нужно сохранить в строке в отформатированном виде. А на экран выводить уже строку. Выполнить форматирование можно следующими строчками кода:

CString strTmp;
strTmp.Format("%3.1f",fMyVar);

или

char strTmp[20];
sprintf(strTmp,"%.5f",fMyVar);

Ключевым здесь является указание формата %a.bf. Здесь a- количество выводимых знаков до запятой, b- количество выводимых знаков после запятой. Как видно из примеров, как a, так и b указывать не обязательно.
Ответ отправил: _Solo_ (статус: 1-ый класс)
Ответ отправлен: 07.06.2007, 18:54


Вопрос № 90.360
Среда разработки: Microsoft Visual C++
Модуль: MFC
На панели у меня Edit Box, в котором(m_e1) float , также на панеле List Box, необходимо перекинуть значеия из Edit в List Box
Отправлен: 07.06.2007, 00:52
Вопрос задал: Kudzury (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Kudzury!
Используйте подобный код, например, в каком-нибудь событии (нажатие кнопки и т.д.)

UpdateData();

CString str;

str.Format(_T("%.4f"), m_edit);

m_list.AddString(str);
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 07.06.2007, 03:30

Отвечает: _Solo_
Здравствуйте, Kudzury!

Для этого можно использовать код, приведенный в приложении. Код этот необходимо поместить в обработчик интересующего Вас события (например, нажатия на кнопку). m_lst- это переменная, соответствующая Вашему ListBox. Её тип- CListBox. Я исходил из предположения, что тип переменной m_e1- float, а не CEdit.

Приложение:

Ответ отправил: _Solo_ (статус: 1-ый класс)
Ответ отправлен: 07.06.2007, 20:44


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное