ibash.org.ru - Новый цитатник Рунета | Цитаты: По дате По рейтингу Случайно Добавить Поиск RSS |
Форум: [быдлокод]Qt4 Отрисовка в реальном времени 1 > [RSS] | Форум: Вход Регистрация Участники Поиск RSS |
JoraX 12.12.2009 - 17:56 | Доброго времени суток, подскажите пожалуйста, задача, собирать данные со звукового входа, и отоображать их в виде графика в реальном времени. Своеобразный осциллограф) Есть дочерний поток, бесконечно читающий файл /dev/dsp и выводящий в основное приложение прочитанные значения. Там, в свою очередь функция формирует из этих значений массив координат Y, и перерисовывает экран. при этом наблюдаются значительные тормоза, и график "запаздывает"). Подскажите пожалуйста куда курить, и что копать? |
3123 #1 - 12.12.2009 - 18:03 | Кастую телепатов в тред. ) |
JoraX #2 - 12.12.2009 - 18:13 | частично код) MyThread.cpp - поток, обрабатывающий файл void MyThread::run() { while (true) { file->read((char *)&buf, 1); //usleep(50); emit isReady((int)buf); } GlWidget.cpp GlWidget::GlWidget { for (float i = -1;i<1;i+=0.1) { massPointX << i; //((width()/10) * i)+10; } } paintGL(){ // Отрисовка glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_LINE_STRIP); glColor3f(1,0,0); for(int i=0;i<massPointX.count();++i) { if (massPointY.count() <= i) break; glVertex2f(massPointX[i], massPointY[i]/1000); } glEnd(); } } void draw(int buf){ // слот, принимающий от потока сигналы if (count > width()) count = 0; count++; float posY = ((buf)); massPointY << posY; Y = posY; if (massPointY.count() > massPointX.count()) massPointY.removeAt(0); updateGL(); } GlWidget.h QList<float> massPointX; QList<float> massPointY; |
anonimous #3 - 12.12.2009 - 18:15 | opengl? |
JoraX #4 - 12.12.2009 - 18:19 | угу. В связке с Qt |
Iwan #5 - 13.12.2009 - 03:36 | А загрузку проца смотрел при этом? И нагрузку на диски? |
JoraX #6 - 13.12.2009 - 11:41 | Загрузка процессора 100% на диски малая нагрузка, связанно это с тем, что файл псевдоустройства читается побитно. пробовал считывать в буфер размером 2048, но не слишком помогло |
вфы #7 - 13.12.2009 - 16:49 | Совсем дурацкий вопрос: ты пробовал использовать профайлер? ) |
JoraX #8 - 13.12.2009 - 17:18 | нет, а это собственно что? :[ |
вфы #9 - 13.12.2009 - 20:27 | Что-то подобное. Или вручную замерить время выполнения кусков кода. ) http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%84%D0%B0%D0%B9%D0%BB%D0%B5%D1%80 |
anonimous #10 - 14.12.2009 - 10:33 | думаю тормоза возникают при massPointY << posY; может стоит заменить на QVector и сначала сделать QVector::reserve(100500) |
вфы #11 - 14.12.2009 - 17:23 | Т.е. QList - связанный список? Тогда это ппц ) |
JoraX #12 - 14.12.2009 - 17:33 | Спасибо, попробую, всё-таки, мне кажется, что для этой задачи не стоит выделять отдельный поток |
anonimous #13 - 15.12.2009 - 03:41 | вфы, нет связный список - QLinkedList QList хранит массив указателей |
ZL[]RD #14 - 16.12.2009 - 02:48 | /dev/dsp напрямую читаешь? Да, имел я глюки при этом. И огромные. Либо юзай универсальные либы, либо точи под альсу, жака и иже с ними. Выигрыш в миллисекундах, как ни странно будет это звучать, все-таки имеется. |
Ским #15 - 17.12.2009 - 02:51 | а можешь потом поделиться исходниками и выложить их под GPL? я для них даже пакет сделаю и может когда-нибудь на досуге помогу подпилить (сейчас просто тонна всего свалилась) |
К списку вопросов | Страницы: 1 > |
«ibash.org.ru — Новый цитатник Рунета» | Почта вебмастера: imail@ibash.org.ru |