示例#1
0
 void TaskManager::finish_task(Task* task)
 {
     u32 dependent_tasks = task->m_dependent_tasks.fetch_sub(1) - 1;
     if (dependent_tasks == 0 && task->m_parent)
     {
         finish_task(task->m_parent);
     }
 }
示例#2
0
void QuickVerifyTask::VerifyBlock( const DM::PORT * port, qlonglong offset , qlonglong sector_count )
{
	assert( port != nullptr );
	auto disk =  disk_master_->getDiskDevice( port );
	assert ( disk != nullptr );
	assert( disk->getSize() <= (qlonglong)( offset + sector_count ) );

	currentSector_ = offset_;
	DWORD block_size = MaxSectorsCount;
	qlonglong prev_sector = currentSector_;

	while( currentSector_ < sector_count )
	{
		if ( task_break_ )
			break;
		if( (qlonglong) (currentSector_ + block_size ) > sector_count )
		{
			block_size = (DWORD) (sector_count - currentSector_);
		}

		qDebug() << "QuickVefifyTask is starting...(" << currentSector_ << ")";
		currentSector_ ;
		bExecuting_ = true;
		if ( ExecuteTask( port->number , currentSector_ , block_size ) )
		{
			/*sectors += block_size;*/
			if ( block_size < MaxSectorsCount )
				block_size *= 2;
		}
		else
		{
			block_size = MinSectorsCount;
			//sectors = currentSector_;
		}
		bExecuting_ = false;

	}
	if ( task_break_ )
		emit break_task( currentSector_ );
	else
		emit finish_task( this->getLastSector() );
}
示例#3
0
 void TaskManager::execute_task(Task* task)
 {
     (task->m_task_function)(task, task->m_data);
     finish_task(task);
 }