Необходимо рассчитать соответствующую задержку, чтобы буфер FIFO был заполнен - PullRequest
0 голосов
/ 07 января 2020

У меня есть задание, с которым я борюсь, есть ли шанс, что кто-то может мне помочь?

По сути, мы создали программу, которая выдает 50 байтов данных в терминал (я использую cygwin) через FIFO трубопровод. Здесь нет задержки, потому что терминал очень быстрый и у него достаточно времени, чтобы потреблять все данные. Это задание касается экспериментов с задержкой. В общем, в следующей части я должен реализовать этот фрагмент кода:

int main()
{
 char q;
 while(1)
   {
     q=getc(stdin);
     if (q == EOF) return 0;
     usleep(x); // HERE X IS THE DELAY
     printf("%c",q);
     fflush(stdout);
   }
}

По сути, эта программа имитирует задержку. Он предназначен для накопления данных в буфере до того момента, когда буфер заполнится, и он не сможет реагировать на ввод достаточно быстро (Первоначально написанная программа, о которой я упоминал ранее, которая производит 50 байтов в секунду, - игра, в которой вводятся клавиши со стрелками) .

Мне не дают никакой дополнительной информации. Проблема не в том, что я не могу заставить программу задерживаться. Я могу положить x как нечто достаточно большое с задержкой, и задержка будет заметна, и все будет хорошо. Что мне нужно, это расчеты и обсуждение. Скажем, если у меня usleep (50000), задержка 0,05 с, как рассчитать скорость заполнения буфера FIFO? Я попытался посмотреть на inte rnet и обнаружил, что размер этого буфера FIFO составляет 65536 байт, но я все еще не мог определить, насколько быстро терминал считывает данные, и как это вообще связано с задержкой, которую я ввел? Мне нужно найти соответствующий случай, то есть когда данные накапливаются с максимальной скоростью чтения терминала (данные в буфере не накапливаются), а затем увеличивают задержку настолько, чтобы данные начали накапливаться в буфере до тех пор, пока он не заполнится и не будет заполнен. лаг начинает наблюдаться? Если я спрашиваю это недостаточно четко, дайте мне знать, какой бит я мог бы уточнить.

Спасибо за ваше время.

...