충격! 타이머에는 실제로 많은 기능이 있습니다. 알고 계셨나요?
데이터 통신 과정에서 데이터 전송 시간에 대한 형식 요구 사항을 만나게 됩니다. 따라서 애플리케이션의 실제 요구 사항에 따라 서로 다른 타이머를 선택하려면 여러 애플리케이션 타이머의 특성을 고려해야 합니다.
타이머 기사 참고
일반적으로 그렇습니다.
1. 수면, 유슬립, 나노슬립
sleep()과 nanosleep()은 모두 깨어나기 전 일정 시간 동안 프로세스를 잠자기 상태로 만들며, 구현 방식은 완전히 다릅니다.
Linux는 시스템 호출 sleep()을 제공하지 않습니다. sleep()은 알람()을 호출하여 보고 시간을 설정하고 SIGALARM 신호에 대한 프로세스를 일시 중지합니다. 두 번째 수준까지만 정확할 수 있습니다.
nanosleep()은 Linuxlinux 타이머 정확성의 시스템 호출입니다. 이 호출은 호출 프로세스를 절전 모드로 전환하고 wake-list 구조의 타이머 대기열에 타이머_목록을 추가합니다. nanosleep()을 통해 추가된 타이머의 실행 함수는 현재 프로세스를 깨우는 기능만 완료합니다. 시스템은 특정 메커니즘을 통해 정기적으로 이러한 대기열을 감지합니다(예를 들어 시스템 호출을 통해 코어에 갇힌 후 코어에서 사용자 모드로 돌아오기 전에 현재 프로세스의 타임 슬라이스가 소진되었는지 확인해야 하며, 그렇다면 Schedule() 함수를 호출하여 일정을 변경하세요. 타이머 큐는 이 함수에서 감지되며, 이 감지는 느린 인터럽트가 반환되기 전에 수행됩니다. 타이밍 시간이 초과되면 타이머에 의해 지정된 함수가 수행됩니다. 호출 프로세스를 깨우기 위해 실행됩니다. 실제로 시스템 타임 슬라이스가 손실될 수 있으므로 nanosleep()의 정확도는 그리 높지 않습니다.
alarm()도 타이머를 통해 Hongqi Linux 운영 체제에 의해 구현되며 그 정확도는 두 번째 수준까지만 정확합니다. 또한 이것이 설정하는 타이머 실행 기능은 지정된 시간에 현재 프로세스에 SIGALRM 신호를 보내는 것입니다. 시간.
2. 세마포어 SIGALRM+alarm()을 사용하세요
알람 방법이 매우 우수하더라도 이러한 방법의 정확도는 1초에 도달할 수 있지만 1초 이상의 정확도를 달성하기는 어렵습니다. *nix 시스템의 세마포어 메커니즘을 사용합니다. 먼저 세마포어 SIGALRM 처리 함수를 등록하고, 알람()을 호출하고, 타이밍 폭을 설정합니다.
으아악
3. RTC 메커니즘을 사용하세요
RTC 메커니즘은 RTC 하드웨어 /dev/rtc를 읽고 ioctl()을 통해 RTC 주파수를 설정하여 시스템 하드웨어에서 제공하는 RealTimeClock 메커니즘을 사용합니다. 시스템 하드웨어에서 제공하는 RTC, 정확도 조정 가능, 특히 높은 코드는 다음과 같습니다.
으아악
이 방법을 사용하려면 시스템에 RTC 장치 Linux 부팅 디스크 생성 도구가 필요합니다. 당사의 1860에는 전원 관리 모듈의 LC1160에 있는 RTC가 사용되며 드라이버에서는 RTC_IRQP_SET 제어 워드를 지원하지 않습니다. 드라이버는 나중에 추가해야 합니다.
4、使用select()
能精确到1us,目前精确定时的最流行方案。通过使用select(),来设置定时器;原理借助select()方式的第5个参数,第一个参数设置为0,三个文件描述符集都设置为NULL,第5个参数为时间结构体,代码如下:
#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 * 1000; select(0, NULL, NULL, NULL, &temp); printf("timern"); return ; } int main() { int i; for(i = 0 ; i < 100; i++) setTimer(1, 0); return 0; }
结果是,每隔1s复印一次,复印100次。
select定时器是阻塞的,在等待时间到来之前哪些都不做。要定时可以考虑再开一个线程来做。
最终,下层应用程序的定时器的京都是内核决定的,这几个定时器的使用方式,尽管理论上可以精确到微妙,虽然,我分别在微妙级测试的时侯,偏差还是很大的,取决于,当时的cpu和进程的调度,等等。。。。
위 내용은 충격! 타이머에는 실제로 많은 기능이 있습니다. 알고 계셨나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux에서 파일 및 폴더를 효율적으로 계산 : 포괄적 인 가이드 Linux에서 파일과 디렉토리를 빠르게 계산하는 방법을 아는 것은 시스템 관리자 및 대규모 데이터 세트를 관리하는 사람에게 중요합니다. 이 안내서는 Simple Command-L을 사용합니다

Linux/UNIX 시스템 관리에는 사용자 계정 및 그룹 멤버십을 효율적으로 관리하는 것이 중요합니다. 이를 통해 적절한 리소스 및 데이터 액세스 제어를 보장합니다. 이 자습서는 Linux 및 UNIX 시스템의 여러 그룹에 사용자를 추가하는 방법에 대해 자세히 설명합니다. 우리

Flatpak 응용 프로그램 권한 관리 도구 : Flatseal 사용자 안내서 Flatpak은 Linux 소프트웨어 배포 및 사용을 단순화하도록 설계된 도구입니다. 가상 샌드 박스의 애플리케이션을 안전하게 캡슐화하여 사용자는 시스템 보안에 영향을주지 않고 루트 권한없이 응용 프로그램을 실행할 수 있습니다. Flatpak 응용 프로그램은이 샌드 박스 환경에 있으므로 운영 체제의 다른 부분, 하드웨어 장치 (예 : Bluetooth, Network 등) 및 소켓 (예 : Pulseaudio, SSH-Auth, Cups 등)에 액세스하는 권한을 요청해야합니다. 이 안내서는 Linux에서 Flatseal을 사용하여 Flatpak을 쉽게 구성하는 방법을 안내합니다.

Linux 커널은 GNU/Linux 운영 체제의 핵심 구성 요소입니다. 1991 년 Linus Torvalds가 개발 한이 도시는 무료, 오픈 소스, 모 놀리 식, 모듈 식 및 멀티 태스킹 UNIX와 같은 커널입니다. Linux에서는 노래에 여러 커널을 설치할 수 있습니다.

이 간단한 가이드는 Linux 운영 체제에 Indian Rupee 기호를 입력하는 방법을 설명합니다. 다른 날, 나는 단어 문서에 "Indian Rupee Symbol (₹)을 입력하고 싶었습니다. 내 키보드에는 루피 기호가 있지만 입력하는 방법을 모르겠습니다. 후에

Linux는 서버 관리, 임베디드 시스템 및 데스크탑 환경으로 사용되는 것이 가장 좋습니다. 1) 서버 관리에서 Linux는 웹 사이트, 데이터베이스 및 응용 프로그램을 호스팅하는 데 사용되어 안정성과 안정성을 제공합니다. 2) 임베디드 시스템에서 Linux는 유연성과 안정성으로 인해 스마트 홈 및 자동차 전자 시스템에서 널리 사용됩니다. 3) 데스크탑 환경에서 Linux는 풍부한 응용 프로그램과 효율적인 성능을 제공합니다.

Linus Torvalds는 Linux Kernel 6.14 릴리스 후보 6 (RC6)을 출시하여 중대한 문제를보고하지 않고 릴리스를 추적했습니다. 이 업데이트에서 가장 주목할만한 변경 사항은 AMD 마이크로 코드 서명 문제를 해결하고 나머지 업데이트는

인터넷에서 좋아하는 비디오를 저장하고 싶었던 적이 있습니까? 재미있는 고양이 비디오이든 나중에보고 싶은 튜토리얼이든, YT-DLP는 여기에 있습니다! 이 포괄적 인 YT-DLP 튜토리얼에서는 YT-DLP가 무엇인지 설명 할 것입니다.
