Récemment dans mon cours d'info, le prof nous a demandé de faire un gestionnaire de fichiers multi-tâches sous Dos. J'ai du me servir des piles, files, arbres et listes.
Je vais te parler pour le multî-tâches car j'ai trouvé ça vraiment bien pour te parler des piles ou files ( je sais pas trop ce que j'avais fait mais ca marchais ).
J'avais une fonction pour gérer la souris, d'après l'endroit où je cliquais dans l'écran. Une pour gérer le scroll, détruire un fichier, créer un dossier, blablabla... gestionnaire de fichiers !!! Tout cela devait être multi-tache donc quand je voulais les fichiers contenu dans le répertoire sélectionné, je ne pouvais pas faire quelque chose comme :
...
while(findnext(&fblock) == 0)
{
moule = malloc(sizeof(struct lafile));
fin -> suivant = moule;
moule -> avant = fin;
moule -> suivant = NULL;
fin = moule;
moule -> position = position_fichiers_1;
position_fichiers_1++;
strcpy(moule -> nom_fichier, fblock.ff_name);
ltoa(fblock.ff_fsize, grosseur, 10);
strcpy(moule -> size_fichier, grosseur);
}
Il faut se faire une pile afin que tout fonctionne en meme temps. Exemple :
1:Gère_souris
2:Lire UNE entrée du répertoire.
3:Quelque chose dautre qu'on aurait cliqué...
Ensuite retourner à gère souris et blablabla... vous comprenez ?
Ça peut paraître idiot, mais quand je suis arrivé à copier un fichier caractère par caractère ( le prof demandait cela pour nous prouver ce qu'il disait ... ), la copie d'un fichier de 30 Ko prenait environ 30 secondes... pendant ce long laps de temps, tout le système était paralyser par la boucle :
if(feof(pfichier) == 0)
{
c = fgetc(pfichier);
fputc(c, pfichier2);
}
Pour le multitaches, je mettais une fois dans ma pile LIRE, ensuite les fonctions necessaire au système, et ensuite ÉCRIRE, ainsi de suite... Windows fonctionne un peu de la même manière
Ma pile contenait des valeurs, correspondant aux étapes dans le SWITCH général.
Vous avez des commentaires ?