C++ (Qt)void Thread2::run( void ){ while (!mStop) { ... }}
C++ (Qt)class Tasking{private: // Не знаю, для чего использовать здесь указатели, поэтому предлагаю сделать проще: QList<task> taskList; QMutex mutex; QWaitCondition cond; public: task getTask(); void addTask(task newTask);};
C++ (Qt)task Tasking::getTask(){ QMutexLocker locker( &mutex ); while( taskList.empty() ) cond.wait( &mutex ); return taskList.takeFirst();} void Tasking::addTask(task newTask){ QMutexLocker locker( &mutex ); taskList.append( newTask ); cond.wakeOne();}
C++ (Qt)task Tasking::getTask(){ semaphore.acquire(); QMutexLocker locker( &mutex ); return taskList.takeFirst();} void Tasking::addTask(task newTask){ QMutexLocker locker( &mutex ); taskList.append( newTask ); semaphore.release();}
C++ (Qt) QMutexLocker locker( &mutex ); // <<<<<<<<<<< 2 while( taskList.empty() ) // <<<<<<<<<<< 1 cond.wait( &mutex ); return taskList.takeFirst();
C++ (Qt)mutax->unlock(); bool returnValue = d->wait(time);
C++ (Qt) if(taskList.count()==0) cond.wait(&mutex, ULONG_MAX);
C++ (Qt) while( taskList.count()==0 ) cond.wait(&mutex, ULONG_MAX);