Как я могу искать через каждый элемент цикла for C - PullRequest
0 голосов
/ 10 октября 2019

У меня есть массив, хранящий данные процесса. Каждый процесс имеет время начала и некоторое время обслуживания. Исходя из этого, я могу вычислить, как долго другие процессы должны ждать перед выполнением. Я отображаю эти данные в виде гистограммы. У меня есть цикл for, который проходит через каждый процесс и выводит его на гистограмму. Например, процесс A имеет время начала 0 и время обслуживания 5. Процесс B имеет время запуска 3 и время обслуживания 3. У меня есть процесс A, который запускает вещи в момент времени 0, он отображает каждую точку в секунду и через 5 секунд процесспривалы.

Процесс B запускается через 3 секунды (должен дождаться завершения A), после чего он начнет выполняться. Проблема в том, что график строит каждый процесс по одному из-за for loop. Таким образом, в случае процесса A, после 5 секунд, когда процесс завершится, мой график вернется к 3 секундам, когда начнется процесс B. Как я могу сделать так, чтобы я прошел через все в массиве и построить точки в режиме реального времени. Например, когда я получаю 3 секунды, процесс A все еще выполняется, но также начинает строить график для B рядом с A.

Надеюсь, я объяснил это правильно. Если бы я не сделал вот мой код для построения графика:

  for(int j=0;j<processCount;j++){
       int current_servTime = current_process[j].serviceTime;
       char current_process_name[11];
       int entryTime = current_process[j].entryTime;
       int waitPeriod = current_process[j+1].waitTime;
       strcpy(current_process_name, current_process[j].process_name);
       appendRow(current_process_name);
       appendBlank(j,entryTime); //blank space before process starts (first process = 0)
       if(waitPeriod!=0){
          for(int z = 0;z<waitPeriod;z++){
            sleep(1);
            //appendBar(Row, number to append, color, label, 1=dotted, 0=solid)
            appendBar(j,(z/z),"red","label",1); //dotted bar to show the process is waiting for the previous one to finish executing
          }
       }
      for (int y = 0;y<current_servTime; y++){
         sleep(1); //one second before you plot the next point
         //appendBar(Row, number to append, color, label, 1=dotted, 0=solid)
         appendBar(j,(y/y),"green"," ",0);
      }
      printf("%s entered the system at %d seconds.</n>",current_process[j].process_name,entryTime);


    } 

...