#include "numberprocessor.h" #include "numberreg.h" NumberProcessor::NumberProcessor(QList *bufferSegments, QList *bufferNumbers, QSemaphore *free, QSemaphore *used, QMutex *mutex, NumberProcessType processType) { this->bufferSegments = bufferSegments; this->bufferNumbers = bufferNumbers; this->free = free; this->used = used; this->mutex = mutex; this->processType = processType; this->stop = false; } void NumberProcessor::abort() { this->stop = true; } NumberProcessor::~NumberProcessor() { qDebug()<<"NumberProcessor dead"; } void NumberProcessor::setBlackSegments(QStringList blackSegments) { this->blackSegments = blackSegments; } void NumberProcessor::setBlackNumbers(QList blackNumbers) { this->blackNumbers = blackNumbers; } void NumberProcessor::run() { switch(processType) { case NumberSort: sort(); break; case NumberRemoveDuplicate: removeDuplicate(); break; case NumberRemoveBlackList: removeBlackList(); break; case NumberRemoveNotPhone: removeNotPhoneNumber(); break; default: break; } } void NumberProcessor::sort() { while(true) { //used->acquire(); if(stop) { break; } mutex->lock(); QString segment; QStringList numbers; if(bufferSegments->size()>0) { segment = bufferSegments->takeLast(); numbers = bufferNumbers->takeLast(); } mutex->unlock(); //free->release(); if(!segment.isEmpty()) { numbers.sort(); emit childTaskFinished(segment,numbers); } } emit threadDestroy(); } void NumberProcessor::removeDuplicate() { while(true) { //used->acquire(); if(stop) { break; } mutex->lock(); QString segment; QStringList numbers; if(bufferSegments->size()>0) { segment = bufferSegments->takeLast(); numbers = bufferNumbers->takeLast(); } mutex->unlock(); //free->release(); if(!segment.isEmpty()) { numbers.sort(); QStringList list; QString tmp; for(int j=0;jacquire(); if(stop) { break; } mutex->lock(); QString segment; QStringList numbers; if(bufferSegments->size()>0) { segment = bufferSegments->takeLast(); numbers = bufferNumbers->takeLast(); } mutex->unlock(); //free->release(); if(!segment.isEmpty()) { for(int j=0;jacquire(); if(stop) { break; } mutex->lock(); QString segment; QStringList numbers; if(bufferSegments->size()>0) { segment = bufferSegments->takeLast(); numbers = bufferNumbers->takeLast(); } mutex->unlock(); //free->release(); if(!segment.isEmpty()) { if(!NumberReg::getSegmentReg().exactMatch(segment)) { segment = ""; } else { for(int i=0;i