示例#1
0
文件: shell.c 项目: Surtr04/misc
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;
		}
	}
}
示例#2
0
文件: shell.c 项目: Surtr04/misc
void stop(int signum) {

	if(actual_pid != -1) {
		kill(actual_pid,signum);
		appendJob(actual_command,actual_pid);
	}

}
示例#3
0
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);
}
示例#4
0
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;
}
示例#6
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);
}