Rumah >Tutorial sistem >LINUX >Pemasa Pemasa pelbagai kaedah aplikasi dan kelebihan dan kekurangan di bawah Linux
Senario aplikasi pemasa sangat luas Di bawah Linux pemasa aplikasi linux, terdapat cara berikut:
1 versi desktop Hongqi Linux, menggunakan sleep() dan usleep()
Ketepatan tidur adalah satu saat, dan ketepatan tidur adalah 1 mikrosaat Kod khusus tidak akan ditulis. Kelemahan menggunakan teknik ini adalah jelas Dalam sistem Linux, fungsi tidur tidak dapat menjamin ketepatan Terutama apabila beban sistem agak berat, tidur biasanya tamat.
2 Gunakan semaphore SIGALRM+alarm()
Ketepatan kaedah ini boleh mencapai satu saat Mereka menggunakan mekanisme semaphore sistem *nix Pertama, daftarkan fungsi pemprosesan SIGALRM semaphore, penggera panggilan(), dan tetapkan lebar masa adalah seperti berikut:
#include #include void timer(int sig) { if(SIGALRM == sig) { printf("timern"); alarm(1); //we contimue set the timer } return ; } int main() { signal(SIGALRM, timer); //relate the signal and function alarm(1); //trigger the timer getchar(); return 0; }
Walaupun kaedah penggera sangat baik, sukar untuk mencapai ketepatan lebih tinggi daripada satu saat dahulu.
3. Gunakan mekanisme RTC
Mekanisme RTC menggunakan mekanisme RealTimeClock yang disediakan oleh perkakasan sistem, membaca perkakasan RTC /dev/rtc, dan menetapkan frekuensi RTC melalui ioctl().
#include #include #include #include #include #include #include #include #include int main(int argc, char* argv[]) { unsigned long i = 0; unsigned long data = 0; int retval = 0; int fd = open ("/dev/rtc", O_RDONLY); if(fd < 0) { perror("open"); exit(errno); } /*Set the freq as 4Hz*/ if(ioctl(fd, RTC_IRQP_SET, 1) < 0) { perror("ioctl(RTC_IRQP_SET)"); close(fd); exit(errno); } /* Enable periodic interrupts */ if(ioctl(fd, RTC_PIE_ON, 0) < 0) { perror("ioctl(RTC_PIE_ON)"); close(fd); exit(errno); } for(i = 0; i < 100; i++) { if(read(fd, &data, sizeof(unsigned long)) < 0) { perror("read"); close(fd); exit(errno); } printf("timern"); } /* Disable periodic interrupts */ ioctl(fd, RTC_PIE_OFF, 0); close(fd); return 0; }
Kaedah ini agak mudah dan menggunakan RTC yang disediakan oleh perkakasan sistem Ketepatan boleh laras dan sangat tinggi.
4, gunakan pilih()
Saya mendengar kaedah ini semasa membaca buku ajaib APUE, dan kemahirannya agak khusus
Pemasa aplikasi Linux Arahan biasa Linux, gunakan pilih() untuk menetapkan pemasa prinsipnya adalah berdasarkan parameter ke-5 kaedah pilih(). , parameter pertama ditetapkan kepada 0, tiga set deskriptor fail semuanya ditetapkan kepada NULL, parameter kelima ialah struktur masa, kodnya adalah seperti berikut:
#include #include #include #include /*seconds: the seconds; mseconds: the micro seconds*/ void setTimer(int seconds, int mseconds) { struct timeval temp; temp.tv_sec = seconds; temp.tv_usec = mseconds; select(0, NULL, NULL, NULL, &temp); printf("timern"); return ; } int main() { int i; for(i = 0 ; i < 100; i++) setTimer(1, 0); return 0; }
Ketepatan teknik ini boleh mencapai tahap yang halus Terdapat banyak pemasa berbilang benang berdasarkan select() di Internet, yang menunjukkan bahawa kestabilan select() masih sangat baik.
Ringkasan: Jika keperluan sistem agak rendah, anda boleh mempertimbangkan untuk menggunakan sleep() mudah, walaupun satu baris kod boleh menyelesaikannya jika sistem mempunyai keperluan ketepatan yang agak tinggi, anda boleh mempertimbangkan mekanisme RTC dan pilih() mekanisme .
Atas ialah kandungan terperinci Pemasa Pemasa pelbagai kaedah aplikasi dan kelebihan dan kekurangan di bawah Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!