コード例 #1
0
ファイル: AVDemuxThread.cpp プロジェクト: 151706061/QtAV
void AVDemuxThread::newSeekRequest(QRunnable *r)
{
    if (seek_tasks.size() >= seek_tasks.capacity()) {
        QRunnable *r = seek_tasks.take();
        if (r->autoDelete())
            delete r;
    }
    seek_tasks.put(r);
}
コード例 #2
0
static void onAndroidUiThread(JNIEnv *, jclass, jlong thiz)
{
    QRunnable *runnable = reinterpret_cast<QRunnable *>(thiz);
    if (runnable == 0)
        return;

    runnable->run();
    if (runnable->autoDelete())
        delete runnable;
}
コード例 #3
0
ファイル: AVDemuxThread.cpp プロジェクト: 151706061/QtAV
void AVDemuxThread::processNextSeekTask()
{
    if (seek_tasks.isEmpty())
        return;
    QRunnable *task = seek_tasks.take();
    if (!task)
        return;
    task->run();
    if (task->autoDelete())
        delete task;
}
コード例 #4
0
ファイル: AVDemuxThread.cpp プロジェクト: bianshifeng/QtAV
void AVDemuxThread::processNextPauseTask()
{
    if (pause_tasks.isEmpty())
        return;
    QRunnable *task = pause_tasks.dequeue();
    if (!task)
        return;
    task->run();
    if (task->autoDelete())
        delete task;
}
コード例 #5
0
ファイル: AVThread.cpp プロジェクト: LinDing/QtAV
bool AVThread::processNextTask()
{
    DPTR_D(AVThread);
    if (d.tasks.isEmpty())
        return true;
    QRunnable *task = d.tasks.takeFirst();
    task->run();
    if (task->autoDelete()) {
        delete task;
    }
    return true;
}
コード例 #6
0
	void ThreadPool::Worker::flushQueue()
	{
		QMutexLocker lock(&m_queueMutex);
		while(!m_queue.isEmpty())
		{
			QRunnable* runnable = m_queue.takeFirst();
			lock.unlock();
			runnable->run();
			if(runnable->autoDelete())
			{
				delete runnable;
			}
			lock.relock();
		}
	}
コード例 #7
0
ファイル: qthreadpool.cpp プロジェクト: xkfz007/vlc
/* \internal

*/
void QThreadPoolThread::run()
{
    QMutexLocker locker(&manager->mutex);
    for(;;) {
        QRunnable *r = runnable;
        runnable = 0;

        do {
            if (r) {
                const bool autoDelete = r->autoDelete();


                // run the task
                locker.unlock();
#ifndef QT_NO_EXCEPTIONS
                try {
#endif
                    r->run();
#ifndef QT_NO_EXCEPTIONS
                } catch (...) {
                    qWarning("Qt Concurrent has caught an exception thrown from a worker thread.\n"
                             "This is not supported, exceptions thrown in worker threads must be\n"
                             "caught before control returns to Qt Concurrent.");
                    registerTheadInactive();
                    throw;
                }
#endif
                locker.relock();

                if (autoDelete && !--r->ref)
                    delete r;
            }

            // if too many threads are active, expire this thread
            if (manager->tooManyThreadsActive())
                break;

            r = !manager->queue.isEmpty() ? manager->queue.takeFirst().first : 0;
        } while (r != 0);

        if (manager->isExiting) {
            registerTheadInactive();
            break;
        }

        // if too many threads are active, expire this thread
        bool expired = manager->tooManyThreadsActive();
        if (!expired) {
            ++manager->waitingThreads;
            registerTheadInactive();
            // wait for work, exiting after the expiry timeout is reached
            expired = !manager->runnableReady.wait(locker.mutex(), manager->expiryTimeout);
            ++manager->activeThreads;
    
            if (expired)
                --manager->waitingThreads;
        }
        if (expired) {
            manager->expiredThreads.enqueue(this);
            registerTheadInactive();
            break;
        }
    }
}
コード例 #8
-1
static PyObject *meth_QRunnable_run(PyObject *sipSelf, PyObject *sipArgs)
{
    PyObject *sipParseErr = NULL;
    PyObject *sipOrigSelf = sipSelf;

    {
        QRunnable *sipCpp;

        if (sipParseArgs(&sipParseErr, sipArgs, "B", &sipSelf, sipType_QRunnable, &sipCpp))
        {
            if (!sipOrigSelf)
            {
                sipAbstractMethod(sipName_QRunnable, sipName_run);
                return NULL;
            }

            Py_BEGIN_ALLOW_THREADS
            sipCpp->run();
            Py_END_ALLOW_THREADS

            Py_INCREF(Py_None);
            return Py_None;
        }
    }

    /* Raise an exception if the arguments couldn't be parsed. */
    sipNoMethod(sipParseErr, sipName_QRunnable, sipName_run, doc_QRunnable_run);

    return NULL;
}