2012-02-01 1 views
0

У меня есть поток, который обрабатывает данные из веб-службы и затем отправляет их в другой класс для обработки данных. Процесс этих данных может занять много времени, иногда больше, чем интервал таймера, который вызывает функцию опроса внутри потока.
Я хотел бы защитить эту функцию опроса, то есть пока обработка данных выполняется, не вводите эту функцию.Какой метод защиты использовать (мьютекс, readwritelock ..) на внутренней функции потока

Мой поток как этот

workerThread -> start timer -> that invoking the polling method -> 
the polling method gets the data and send it to processing > mean while this polling function can be called again . 

ответ

1

Если функция опроса занимает больше времени, чем для выполнения таймера опроса, чем в вашей реализации функции вы могли бы попытаться заблокировать мьютекс

void pollingFunction() { 

    bool isLocked = mutex.tryLock(3000); //timeout if you want 
    if(isLocked) 
    { 
     //process the data 
    } 
    else 
    { 
     return; 
    } 

    mutex.unlock(); 
} 
0

я предполагаю, что вы используете по крайней мере 2 темы. один запускается таймером, другой обрабатывает данные опроса. поэтому шаблон объекта Monitor будет работать для него, вам нужно определить очередь для данных опроса и определить 2 переменных условия (не полный, а не пустой). если он не заполнен, тогда может начаться опрос, а затем поместить данные в очередь. если он не пуст, тогда обработка может удалять данные и обрабатывать их.

+0

нет таймера находится внутри помещения нити – user63898

 Смежные вопросы

  • Нет связанных вопросов^_^