-
Notifications
You must be signed in to change notification settings - Fork 0
scheduler : main.c
int main() {
int optionsAllowed[] = { 1, 7 };
int value;
do {
printMenu(options, "Scheduler C", "Owanesh and MatteoMauro", false, true,
50);
printPolicy();
value = selectOption("Selezionare un'opzione del menu': ",
optionsAllowed, NULL, 0);
switchOptions(value);
printList(head);
} while (value != 7);
return 0;
}
void switchOptions(int value) {
unsigned long id;
switch (value) {
case 1:
insertNewTask(&head);
bubbleSort(&head);
break;
case 2:
execute(&head);
if (policyScheduling == POLICY_EXEC_CYCLES) {
bubbleSort(&head);
}
break;
case 3:
id = selectOption("\nInserire l'ID del task che si vuole eseguire: ",
NULL, NULL, 0);
executeById(&head, id);
if (policyScheduling == POLICY_EXEC_CYCLES) {
bubbleSort(&head);
}
break;
case 4:
id = selectOption("\nInserire l'ID del task che si vuole cancellare: ",
NULL, NULL, 0);
deleteById(&head, id);
break;
case 5:
id = selectOption("\nInserire l'ID del task che si vuole modificare: ",
NULL, NULL, 0);
modifyById(head, id);
if (policyScheduling == POLICY_PRIORITY) {
bubbleSort(&head);
}
break;
case 6:
changeScheduling();
bubbleSort(&head);
break;
}
}La funzione main() richiama la stampa del menù principale e richiede all’utente l’opzione da eseguire fino alla digitazione del 7 (termina programma). Il range dei valori possibili è passato alla funzione apposita, responsabile della richiesta della selezione e dei vari controlli di sintassi (approfondita nella sezione utilities.c). Ad ogni corretta selezione corrisponde una chiamata a switchOptions() che si occupa di delegare l’operazione al modulo corrispondente.
Ogni stampa del menù principale prevede l’informazione della politica di scheduling corrente.
SwitchOption() è abbastanza esplicativa, per ogni case viene eseguita una delle operazioni richieste dal menù principale. Ogni volta che la lista dei task potrebbe dover essere cambiata, viene eseguito un ordinamento attraverso bubblesort().
Variabili:
// opzioni del menù principale
const char* options[] = { "(1) Crea un nuovo task",
"(2) Esegui il prossimo task", "(3) Esegui un task specifico",
"(4) Elimina un task specifico", "(5) Modifica la priorita' di un task",
"(6) Cambiare la politica di scheduling utilizzata",
"(7) Uscire dal programma", NULL };
//puntatore alla testa della coda dei task
ReadyQueue *head = NULL;Main contiene la dichiarazione del puntatore alla testa dei task e le opzioni del menù.
In particolare non si è voluto realizzare una variabile extern per tale puntatore (nonostante sarebbe stato senza dubbio utile dato che viene spesso sfruttata nei moduli), ma si è voluto esplicitare il passaggio della variabile ad ogni funzione che ne richiede l’uso, per migliorare la leggibilità del codice (inoltre dato che il puntatore stesso potrebbe venir cambiato, è stato spesso necessario passare l’indirizzo del puntatore, per esempio a bubblesort).
Made with ❤️ by Owanesh and MatteoMauro | MIT ©