//function calculates waiting time and q length float multitaskQ(Task * task0, Task * task1, float * wait0, float * wait1, float * qL) { float currentT = 0; int i = 0; int * arrt = malloc(sizeof(int)*MAX_LINE_LENGTH); Task * head0 = task0; Task * head1 = task1; while(task0 != NULL && task1 !=NULL) { if( task1->aritime <= currentT && task0->aritime > currentT )//group 1 has already arrived but not group 0 before previous job done { * wait1 += (currentT-task1->aritime); arrt[i++] = task1->aritime; task1->tlq = currentT; currentT += task1->stime; task1 = task1->next; } else if(task0->aritime <= currentT) // group 0 arrived before previous job done { * wait0 += (currentT-task0->aritime); arrt[i++] = task0->aritime; currentT += task0->stime; task0->tlq = currentT - task0->stime; task0 = task0->next; } else if( task1->aritime < task0->aritime)//group 1 arrived first in server's free time { arrt[i++]= task1->aritime; currentT = task1->aritime + task1->stime; task1->tlq = currentT - task1->stime; task1 = task1->next; } else if(task1->aritime >= task0->aritime)//group 0 arrived dirst in server's free time { arrt[i++] = task0->aritime; currentT = task0->aritime + task0->stime; task0->tlq = currentT - task0->stime; task0 = task0->next; } } while(task0 != NULL && task1 == NULL)//all of group1 have been served { if(task0->aritime <= currentT) { * wait0 += (currentT - task0->aritime); arrt[i++] = task0->aritime; currentT += task0->stime; task0->tlq = currentT - task0->stime; task0 = task0->next; } else { arrt[i++] = task0->aritime; currentT = task0->aritime + task0->stime; task0->tlq = currentT - task0->stime; task0 = task0->next; } } while(task1 != NULL && task0 == NULL)//all of group1 have been served { if( task1->aritime <= currentT) { *wait1 += (currentT - task1->aritime); arrt[i++] = task1->aritime; task1->tlq = currentT; currentT += task1->stime; task1 = task1->next; } else { arrt[i++] = task1->aritime; currentT = task1->aritime + task1->stime; task1->tlq = currentT - task1->stime; task1 = task1->next; } } i = checka(arrt,i); int j; for(j = 0; j < i; j++) { * qL += qLength(head0,head1,arrt,j); } free(arrt); return currentT; }
int main(int argc, char *argv[]) { // Define basic variables. int input; productList *products; Queue *q; // Allocate memory for pointers. products = newProductList(); q = newQueue(); // Load product-price data store and assert that it succeeded. if(loadProductList(products, "priceList.csv")!=0) { wait(); exit(-1); } queueInit(q); // Initialize queue. setAppTitle("SUPER MARKET COUNTER"); showSplash("splash.txt"); getch(); // Loops the menu till user chooses to exit. do { // Declare menu options. char mainMenu[][16]={"Arrive", "Process", "Print", "Front", "Rear", "Length", "Exit"}; // Display menu and receive user input. input = showMenu("Main Menu", mainMenu, 7); // Choose a function based on user input. switch(input) { case 1: qArrive(q, products); break; case 2: qProcess(q); break; case 3: qPrint(q); break; case 4: qFront(q); break; case 5: qRear(q); break; case 6: qLength(q); break; case 7: qExit(q, products); break; default: printf("Invalid Menu Option. Try again!"); wait(); continue; }; }while(1); return 0; }