Articles of 定时器

如何检查计时器任务是否在后台运行?

下面的代码用于通过udp层的套接字接收来自主设备的数据。 在我的项目中有一些API支持,我创build了一个计时器任务,每2ms,10ms等等调用任务。 我正在使用远程C / C ++应用程序在eclipse IDE中的embedded式PC目标上debugging此程序。 我正在调用CreateSocket函数内的CreateSocket maketimer (alarm) 。 但是如何在后台每隔2ms,10ms和100ms检查定时器任务调用函数TASK1,TASK2和TASK3? #include "MAIN.h" #define BILLION 1000000L timer_t firstTimerID, secondTimerID, thirdTimerID; double Task2ms_Raster, Task10ms_Raster, Task100ms_Raster ; int connectedSocket, acceptSocket; struct sockaddr_in addr; struct sockaddr client, dest; char buf[128]; long rc, sentbytes; int port = 18017; void TASK1(Task2ms_Raster) { struct timespec start, stop; uint32 StartTime, StopTime; […]

如何增加内核定时器的频率

我想测量我的驱动程序代码(Linux版本3.4)中的一些语句之间的时间。 我使用jiffieslogging计数器的开始和结束,然后转换为毫秒。 默认情况下, HZ值被定义为128 ,其精度仅为7毫秒 (即对于计数器中的每个增量1 ,相应的时间将增加7毫秒 ) 如果我把HZ的值增加到1000 ,我可以得到1ms的精度。 我应该修改内核代码中的一些语句。 到目前为止,我已经试过这些东西,但徒劳无功 在arch/arm/include/asm/param.h , 我replace了 #define HZ CONFIG_HZ 同 #define HZ 256 。 还有其他的陈述要修改吗?

计时器和系统日志组合将导致我的代码挂起的情况

我尝试debugging由于在我的程序中使用计时器和系统日志function的问题。 在这里,我附上示例程序代码和terminal和系统日志的日志,以适当地进行debugging。 我不明白为什么这个程序会在一段时间后挂起。 所以在这里,我有2个问题,1.当定时器到期时,睡眠正在中断,因为它会产生SIGPROF 2.在一段时间或一段时间后,系统日志会被挂起 码: #include <stdio.h> #include <time.h> #include <signal.h> #include <string.h> #include <unistd.h> #include <syslog.h> #define get_curr_date_time(date_time) \ { \ time_t t; \ time(&t); \ char *strtime = ctime(&t); \ strncpy(date_time, strtime, strlen(strtime) – 1); \ } #define DEBUG_INFO(p,x,arg…) \ {\ printf("%s:%d,1\n", __func__, __LINE__);\ char current_time[32] = {0}; \ printf("%s:%d,2\n", __func__, __LINE__);\ […]

CPU计时器在C + +

unsigned char ticks_bits[3] = { 0x0F, 0x31, 0xC3}; __uint64_t ( * ticks ) () = (__uint64_t (*) ()) & ticks_bits; __uint64_t T = ticks(); // CRASH! 我已经在Windows-32bit中使用这个代码多年来得到CPU的滴答声。 但它会在Linux 64位崩溃。 有没有办法让它工作?

asm / timex.h和get_cycles()哪里去了?

在较旧的Linux发行版中,我可以在包含asm / timex.h之后调用get_cycle()。 现在我改成了Kubuntu 9.04,没有asm / timex.h,加上sys / timex.h中没有get_cycle()。 有谁知道为什么这个改变,如何访问这个函数/macros或replace它? 或者,甚至更好,在哪里阅读关于它的信息?

64位Linux上的高分辨率定时器支持

我试图在2.6.39.1 64位Linux上启用高分辨率定时器支持。 为此,我首先在.config中设置CONFIG_HIGH_RES_TIMERS=y 。 另外, grep HZ .config的输出是: # CONFIG_RCU_FAST_NO_HZ is not set CONFIG_NO_HZ=y # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set CONFIG_HZ_1000=y CONFIG_HZ=1000 CONFIG_MACHZ_WDT=m 但是,重新编译内核后,下面的命令的输出不是预期的1 nsec 。 cat /proc/timer_list |grep resolution print: .resolution: 999848 nsecs 另外, cat /proc/timer_list |grep handler输出: event_handler: tick_handle_periodic ,而不是event_handler: hrtimer_interrupt 当我使用hrtimer进行实验时,我显然没有看到结果的纳秒精度。 我也尝试运行这里提到的C程序,这应该有助于确定Linux内核定时器中断频率。 运行C程序的结果如下: […]

C语言在指定的时间调用一个函数

我正在使用下面的C代码(Linux的Ubuntu的)每5分钟样本经纪服务器,并得到出价和问价值: int main(int argc, char *argv[]) { struct stock myStock; struct stock *myStock_ptr; struct timeval t; time_t timeNow; strcpy(myStock.exchange,"MI"); strcpy(myStock.market,"EQCON"); strcpy(myStock.t3Id,"1"); strcpy(myStock.subscLabel,""); strcpy(myStock.status,"0"); strcpy(myStock.ask,""); strcpy(myStock.bid,""); buildSubLabel(&myStock); while (1) { t.tv_sec = 1; t.tv_usec = 0; select(0, NULL, NULL, NULL, &t); time(&timeNow); sample(&myStock); printf("DataLink on %s\n",myStock.subscLabel); printf("Time Now: — %s",ctime(&timeNow)); printf("DataLink Status—- %s\n",myStock.status); printf("Ask — %s\n",myStock.ask); […]

Android / Linux线程join超时

有没有pthreads API调用,可以做一些类似pthread_join()但超时? 我正在寻找一个类似于Windows WaitForSingleObject(HANDLE句柄,int超时)函数的函数。 我知道有一个pthread_timedjoin()调用,但只有某些版本的Linux(绝对不是在Android)上才可用。

networking协议中的定时器

我正在RedHat / C中使用一个名为SMPP的协议构build一个networking应用程序,这个协议正被电信用来发送短信。 我正在发送消息(〜70 SMS /秒)到服务器,我必须等待几秒钟,成功的响应和删除消息,但如果消息超时,那么我必须重新发送消息到服务器。 问题是如何devise一些东西来重试过期的消息?

使用sigev_notify = SIGEV_THREAD_ID方法的POSIX计时器

在multithreading场景中,我试图实现一个POSIX计时器,在计时器到期时,应该唤醒同一进程的下一个线程(一次只有一个线程正在运行,而其他所有线程都处于阻塞状态)。 在计时器中,我使用sigev_notify = SIGEV_THREAD_ID既不希望任何处理程序服务的信号,也不想在计时器到期后创build一个新的线程。 //Import #define _GNU_SOURCE #define _POSIX_C_SOURCE 199309 #include <sched.h> #include <unistd.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <signal.h> #include <errno.h> #include <semaphore.h> #include <sys/stat.h> #include <fcntl.h> #include <syscall.h> #define NUM_THREADS 10 #define CLOCKID CLOCK_REALTIME int ret; //pthread_cond_t condA[NUM_THREADS+1] = PTHREAD_COND_INITIALIZER; pthread_cond_t condA = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = […]