C'de system("pause") kullanımı programın çıkış yapana kadar beklemesine dayanır. Bundan dolayıdır ki, programda bu ibareyi eklemeyenler (ya da eklemeyi unutanlar) -özellikle Linux harici bir sistemde- programın derlenmesiyle birlikte çıkış yaptığını göreceklerdir.
Peki gerçekte bu system("pause")'un işletim sistemine olan etki-tepkisi ve maliyeti nedir? Yazılan programda system("pause") satırı işletim sisteminde şunları gerçekleşir:
Peki gerçekte bu system("pause")'un işletim sistemine olan etki-tepkisi ve maliyeti nedir? Yazılan programda system("pause") satırı işletim sisteminde şunları gerçekleşir:
- Programı askıya al
- İşletim sistemine tekrar çağır
- Yeni bir işletim sistemi shell'i aç (işletim sistemini alt-işlem olarak yenile)
- PAUSE komutunu bul
- Komutu çalıştırmak için belleği düzenle
- Belleği tekrar düzenle
- İşletim sistemi shell'inden çık
- Programı tekrar çağır ve çalıştır
Görülüyor ki system("pause") komutunun işletim sistemine ve CPU'ya maliyeti ağır. Bu her ne kadra küçük programlarda kendini belli etmese de büyük bellek ve CPU gerektiren programlarda özellikle multi-thread denilen çoklu işlemleri aynı anda yapan programlarda kullanıldığında büyük bir performans arkı yaratacaktır. Onun içindir ki, C kütüphanesinde hali hazırda tanımlanmış olan getchar() kullanarak system("puase") işlemini hacklemek akla gelen ilk çözümleren olabilir. Şöyle ki:
int main(int argc, char *argv[])Bu program şu şekilde de yazılabilir:
{
int dogs;
printf("Kaç köpeğiniz var?\n");
scanf("%d", &dogs);
printf("%d köpeğiniz var!\n", dogs);
system("PAUSE");
return 0;
}
int main(int argc, char *argv[])
{
int dogs;
printf("How many dogs you have?\n");
scanf("%d", &dogs);
printf("So you have %d dog(s)!\n", dogs);
getchar();
getchar();
return 0;
}
2 comments:
getch()'yi kullanmak için dahil edilmesi gereken conio.h kütüphanesinin maliyeti hakkında bir bilgi var mı, merak ettim
Kütüphaneler sadece derleme sırasında maliyet getirir. Programın çalışması sıransında harhangi bir ek maliyet getirmez.
Post a Comment