void repo::gui::RepoDialogUserManager::refresh(const core::RepoBSON &command) { if (cancelAllThreads()) { core::MongoClientWrapper mongo = dbCache->getConnection(ui->hostComboBox->currentText()); std::string database = ui->databaseComboBox->currentText().toStdString(); RepoWorkerUsers* worker = new RepoWorkerUsers(mongo, database, command); worker->setAutoDelete(true); // Direct connection ensures cancel signal is processed ASAP QObject::connect( this, &RepoDialogUserManager::cancel, worker, &RepoWorkerUsers::cancel, Qt::DirectConnection); QObject::connect( worker, &RepoWorkerUsers::userFetched, this, &RepoDialogUserManager::addUser); QObject::connect( worker, &RepoWorkerUsers::databasesWithProjectsFetched, this, &RepoDialogUserManager::addDatabasesWithProjects); QObject::connect( worker, &RepoWorkerUsers::customRolesFetched, this, &RepoDialogUserManager::addCustomRoles); QObject::connect( worker, &RepoWorkerUsers::finished, ui->progressBar, &QProgressBar::hide); QObject::connect( worker, &RepoWorkerUsers::finished, this, &RepoDialogUserManager::finish); QObject::connect( worker, &RepoWorkerUsers::progressRangeChanged, ui->progressBar, &QProgressBar::setRange); QObject::connect( worker, &RepoWorkerUsers::progressValueChanged, ui->progressBar, &QProgressBar::setValue); //---------------------------------------------------------------------- // Clear any previous entries clear(true); //---------------------------------------------------------------------- ui->progressBar->show(); ui->hostComboBox->setEnabled(false); ui->databaseComboBox->setEnabled(false); threadPool.start(worker); } }
void *blockMovement(void *arg) { Block *block = (Block *) arg; int is_last_move_right = 1; int ch; // timeout(-1); while(1) { ch = getch(); switch(ch) { case 'q': pthread_mutex_lock(&mutex); cancelAllThreads(); free(block); endwin(); pthread_mutex_unlock(&mutex); pthread_exit((void *) 0); case 'p': // a hack to pause the game pthread_mutex_lock(&mutex); getch(); pthread_mutex_unlock(&mutex); case KEY_RIGHT: if(!is_last_move_right) { ++(block->end); is_last_move_right = 1; } pthread_mutex_lock(&mutex); moveBlockToRight(block->row, &(block->start), &(block->end), block->screen_width); pthread_mutex_unlock(&mutex); is_last_move_right = 1; break; case KEY_LEFT: if(is_last_move_right) { --(block->end); is_last_move_right = 0; } pthread_mutex_lock(&mutex); moveBlockToLeft(block->row, &(block->start), &(block->end)); pthread_mutex_unlock(&mutex); break; } } }