int run (char **args,int bg, char *comm,char *in, char *out) { pid_t pid = fork(); int status; if(in) redir_input(in); if(out) redir_output(out); if(pid == 0) { if(bg) raise(SIGSTOP); execvp(args[0],args); perror(args[0]); exit(-1); } else { if(bg) { appendJob(comm,pid); } else { actual_pid = pid; waitpid(pid,&status,0); actual_pid = -1; if(WIFEXITED(status)) return WEXITSTATUS(status); else return -1; } } }
void stop(int signum) { if(actual_pid != -1) { kill(actual_pid,signum); appendJob(actual_command,actual_pid); } }
void MaintenanceThread::generateThumbs(const QStringList& paths) { JobCollection* const collection = new JobCollection(); for(int i=0; i < paths.size(); i++) { ThumbsTask* const t = new ThumbsTask(); t->setItem(paths.at(i)); connect(t, SIGNAL(signalFinished(QImage)), this, SIGNAL(signalAdvance(QImage))); connect(this, SIGNAL(signalCanceled()), t, SLOT(slotCancel()), Qt::QueuedConnection); collection->addJob(t); } appendJob(collection); }
void MaintenanceThread::sortByImageQuality(const QStringList& paths, const ImageQualitySettings& quality) { JobCollection* const collection = new JobCollection(); for(int i=0; i < paths.size(); i++) { ImageQualityTask* const t = new ImageQualityTask(); t->setItem(paths.at(i), quality); connect(t, SIGNAL(signalFinished(QImage)), this, SIGNAL(signalAdvance(QImage))); connect(this, SIGNAL(signalCanceled()), t, SLOT(slotCancel()), Qt::QueuedConnection); collection->addJob(t); } appendJob(collection); }
void WorkerThread::setImagesList(const KUrl::List& list) { pd->urls = list; JobCollection* collection = new JobCollection(this); for (KUrl::List::const_iterator it = pd->urls.constBegin(); it != pd->urls.constEnd(); ++it) { Task *t = new Task((KUrl&)(*it), this, pd); connect(t, SIGNAL(calculationFinished(WorkerThreadData*)), this, SIGNAL(calculationFinished(WorkerThreadData*))); collection->addJob(t); } appendJob(collection); pd->cancel = false; pd->progress = 0; }
void MaintenanceThread::syncMetadata(const ImageInfoList& items, MetadataSynchronizer::SyncDirection dir, bool tagsOnly) { JobCollection* const collection = new JobCollection(); for(int i=0; i < items.size(); i++) { MetadataTask* const t = new MetadataTask(); t->setTagsOnly(tagsOnly); t->setItem(items.at(i), dir); connect(t, SIGNAL(signalFinished(QImage)), this, SIGNAL(signalAdvance(QImage))); connect(this, SIGNAL(signalCanceled()), t, SLOT(slotCancel()), Qt::QueuedConnection); collection->addJob(t); } appendJob(collection); }