While Schleife beenden mit kbhit in Programmiersprache C?
Hallo, ich habe folgende while Schleife die mir eine 10GB große .csv Datei nach einem bestimmten String durchsucht. Da die Suche etwas lange dauert möchte ich gerne die While schleife verlassen indem ich eine bestimmte Taste drücke, z.b "y". Habe dazu eine break Bedingung mit kbhit versucht umzusetzen:
Allerdings dauert die Suche mit der Abbruchbedingung break und kbhit sehr viel länger als ohne diese Funktion. Weiß jemand warum?
Bzw. kann ich auf einem anderen Weg die While Schleife verlassen sobald ich eine bestimmte Taste drücke?
while(fgets(puffer, BUF, f) != NULL)
{
if(kbhit())
{
int key = getch();
if(key == 'y')
{
break;
}
}
strcpy(puffer_bak, puffer);
wort = strtok(puffer, trennzeichen);
permno = atoi(wort);
while(wort != NULL)
{
if(strcmp(wort,searchstring)==0)
{
if(permno!=permno_alt)
{
printf("%s",puffer_bak);
}
permno_alt=permno;
}
wort = strtok(NULL,trennzeichen);
}
}
fclose(f);
1 Antwort
Ich kenne kbhit nicht genau, aber es scheint wohl eine nicht geringe Ausführungszeit zu haben so wie du das sagst. Ich habe Beispiele mit sleep(500) gesehen um das zu verwenden. Spontan wäre meine Idee, dass du dir noch eine Zählvariable machst und nur alle x Durchläufe der Schleife den Abschnitt mit kbhit auszuführen. Das löst zwar dein Problem nicht komplett, sollte es aber zumindest abmildern.
Wäre aber gespannt, wenn jemand eine Lösung hat die das Problem besser löst :)
Das hört sich mal gut an. Wenn du schaffst das Problem komplett zu lösen schreib doch bitte nochmal hier rein. Würde mich interessieren :)
Danke, der Tipp mildert das Problem