void RC_Widget::run() { struct timeval a, b; long totalb, totala; long diff; int cycle_processing = 50; while (true) { gettimeofday(&a, NULL); totala = a.tv_sec * 1000000 + a.tv_usec; // pthread_mutex_lock( &mutex ); if(!press && !automatic){ if(p_actual.x()>250){ p_actual.setX(p_actual.x() - 10); if(p_actual.x()<250) p_actual.setX(250); } else if(p_actual.x()<250){ p_actual.setX(p_actual.x() + 10); if(p_actual.x()>250) p_actual.setX(250); } if(!block_Y){ if(p_actual.y()>250){ p_actual.setY(p_actual.y() - 10) ; if(p_actual.y()<250) p_actual.setY(250); } else if(p_actual.y()<250){ p_actual.setY(p_actual.y() + 10) ; if(p_actual.y()>250) p_actual.setY(250); } } } pthread_mutex_unlock( &mutex ); // gettimeofday(&b, NULL); totalb = b.tv_sec * 1000000 + b.tv_usec; diff = (totalb - totala) / 1000; if (diff < 0 || diff > cycle_processing) diff = cycle_processing; else diff = cycle_processing - diff; /*Sleep Algorithm*/ usleep(diff * 1000); emit update_GUI(); } }
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: on_start_button_clicked(); break; case 1: update_GUI(); break; case 2: motion_capture_failed(); break; default: ; } _id -= 3; } return _id; }
RC_Widget::RC_Widget(bool block_Y, int max_up_down, int min_up_down, int max_left_right, int min_left_right, int rev_up_down, int rev_left_right, QWidget *parent) : QWidget(parent) { if (pthread_mutex_init(&mutex, NULL) != 0){ std::cout << "mutex init failed" << std::endl; } QPalette pal_background; pal_background.setColor(QPalette::Background, Qt::black); setAutoFillBackground(true); setPalette(pal_background); setMaximumSize(500, 500); setMinimumSize(500, 500); press = false; automatic = false; this->block_Y = block_Y; boost::thread workerThread(&RC_Widget::run, this); connect(this, SIGNAL(update_GUI()), this, SLOT(on_update_GUI_recieved())); p_actual.setX(250); if(block_Y) p_actual.setY(495); else p_actual.setY(250); this->min_value_up_down = min_up_down; this->max_value_up_down = max_up_down; this->min_value_left_right = min_left_right; this->max_value_left_right = max_left_right; this->rev_left_right = rev_left_right; this->rev_up_down = rev_up_down; }