LINUX.ORG.RU

Избранные сообщения salik

ожидание событий в main() от потоков (threads) (нуб)

Форум — Development

Добрый день, ЛОР. Вопрос нубский. Но, для меня, пока неясен.

Что имеем: main() и 4 потока (threads) Потоки опрашивают из своих fd и передают в свои fd данные. Здесь используем epoll(). Тут понятно.

Данные от потоков и в потоки передаются в main() через глобальные переменные.Для факта наличия новых данных используются флаги. И все это в while(1). Вот этот момент и не нравится.

Ткните носом, как это правильно можно реализовать? Можно ли использовать epoll() в main() (получается создав fd между потоками и main?)? Граммотно ли это?

 , ,

salik
()

libxml2 подскажите пример кода Си

Форум — Development

Братцы подскажите пожалуйста. Разбираюсь с парсером libxml2. Застрял на одном вопросе. А именно как функции xmlReadFile скормить URL? Если можно кусок кода на Си. Прототип у не такой xmlReadFile (const char * filename, const char * encoding, int options). Если передаю имя файла xml - работает, если даю URL с xml - вылетает с ошибкой «I/O warning : failed to load external entity». Спасибо.

 , ,

salik
()

SCHED_RR изменение временного интервала

Форум — Development

Подскажите пожалуйста. Только начал изучать планирование процессов и sched_setscheduler. Сейчас заткнулся на политике SCHED_RR. Не могу изменить временной интервал для процессов.

Код такой, компилится без ошибок, а значения временного интервала sched_rr_get_interval(0, &ts) не изменяются.

int main(){
	
  struct sched_param param;
  struct timespec ts;											
  
  param.sched_priority = 99;								
 
  /* Необходим максимальный интервал времени */
  
  nice(-20);													
  if (sched_setscheduler(0, SCHED_RR, &param) == -1) {			
    perror("sched_setscheduler failed\n");
    return 3;
	}
  sched_rr_get_interval(0, &ts);
  printf ("max timeslice = %ld msec\n", ts.tv_nsec/1000000);
  
  /* выводит -> max timeslice = 199 msec */
 
  /* Необходим минимальный интервал времени. Обратите также
   * внимание, что аргументом для nice является "приращение",
   * а не абсолютное значение. Таким образом, выполнение
   * nice(39) приводит к работе с приоритетом nice +19
   */
   
  nice(39);
  if (sched_setscheduler(0, SCHED_RR, &param) == -1) {			
    perror("sched_setscheduler failed\n");
    return 3;
	}
  sched_rr_get_interval(0, &ts);
  printf ("min timeslice = %ld msec\n", ts.tv_nsec/1000000);
  
  /* output -> min timeslice = 9 msec */
 
  return 1;
}

Взято отсюда http://dmilvdv.narod.ru/Translate/ELSDD/elsdd_process_scheduling.html

работаю с Debian 7

 

salik
()