Вопрос № 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!!!!
Реализовать 2 шаблона классов. В первом из них содержится числовой массив, во втором переменная и функция, выполняющая изменение знака отрицательных элементов массива и вычисляющая сумму элементов массива. Вычисленное значение заносится в переменную.
Отвечает: Терсков Сергей
Здравствуйте, Ковалев Антон Сергеевич!
Реализация классов и пример работы с ними в приложении...
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 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
Ответ отправил: 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