Linux内核信号量和定时器问题请教: [问题点数:100分,结帖人jjk927]

Bbs1
本版专家分:1
结帖率 85%
Bbs6
本版专家分:9118
Blank
黄花 2009年3月 Linux/Unix社区大版内专家分月排行榜第二
Blank
蓝花 2009年4月 Linux/Unix社区大版内专家分月排行榜第三
Bbs7
本版专家分:17695
版主
Blank
红花 2009年12月 Linux/Unix社区大版内专家分月排行榜第一
Bbs1
本版专家分:1
Bbs7
本版专家分:17695
版主
Blank
红花 2009年12月 Linux/Unix社区大版内专家分月排行榜第一
Bbs1
本版专家分:1
Bbs1
本版专家分:1
linux内核定时器
我做的程序需要两个<em>定时器</em>,一个用于自动备份,一个用于自动清理所以我觉得用alarm()的话,统一发送SIG_ALRM信号是不行的,所以我采用了struct timer_list和add_timer机制,但是发现要包含linux/timer.h,所以不得不改用模块编程(正好可以深入一下内核),可是发现在内核里包含time.h并调用localtime(),mktime()等函数都不行,后来又改包含linux/time.h,发现那个里面的函数跟time.h不一样,请各位指点一下怎样做。rnrn另外,我对内核模块的编译也很迷糊,希望各位大侠可以耐心指点一下。不胜感谢。我的模块代码和makefile如下,请指正:rnrn#include rn#include rn#include rn#include rn#include rnrnstatic int backup_time=0; //模块参数,自动备份时间rnstatic int clean_time=0; //模块参数,自动清理时间rnstruct timer_list backup_timer[2]; //全局变量,两个计时器rnint DB_BACKUP()rnrn return 0;rnrnrnint DB_CLEAN()rnrn return 0;rnrnrn//自动备份函数rnvoid auto_backup(unsigned long data)rn rn struct timeval hour;rn hour.tv_sec=86400;rn hour.tv_usec=0;rn int jiffies_t=tvtojiffies(&hour);rnrn //设置第一个计时器rn backup_timer[0].expires=jiffies_t;rn backup_timer[0].data=1;rn backup_timer[0].function=DB_BACKUP;rn add_timer(&backup_timer[0]);rnrn //实现备份功能 rn DB_BACKUP();rnrn return;rnrnrn//自动清理rnvoid auto_clean(unsigned long data)rnrn struct timeval hour;rn hour.tv_sec=86400;rn hour.tv_usec=0;rn int jiffies_t=tvtojiffies(&hour);rnrn //设置自动清理<em>定时器</em>rn backup_timer[1].expires=jiffies_t;rn backup_timer[1].data=0;rn backup_timer[1].function=DB_CLEAN;rn add_timer(&backup_timer[1]);rnrn DB_CLEAN();rnrn return;rnrnrn//初始化两个<em>定时器</em>rnint set_backup_timer()rnrn printk(KERN_ALERT "Auto Backup:%d,Auto Clean:%d",backup_time,clean_time);rnrn struct tm tm_v;rn time_t time1,time2;rn struct timeval hour;rn hour.tv_usec=0;rn time1=time(NULL); //姹傚嚭褰撳墠鏃堕棿rn memcpy((char *)&tm_v,(char *)localtime(&time1),sizeof(struct tm)); rn tm_v.tm_min=0;rn tm_v.tm_sec=0; //鍚屼笂rnrn tm_v.tm_hour=backup_time;rn time2=mktime(&tm_v);rn if((hour.tv_sec=difftime(time2,time1))<0)rn rn hour.tv_sec+=86400;rn rn jiffies_t=tvtojiffies(&hour);rnrn //浠ヤ笅鏄嚜鍔ㄥ浠藉畾鏃跺櫒rn del_timer(&backup_timer[1]);rn backup_timer[1].expires=jiffies_t;rn backup_timer[1].data=0;rn backup_timer[1].function=auto_clean;rn add_timer(&backup_timer[1]);rnrn return 0;rnrnrnstatic int __init backup_init(void)rnrn init_timer(&backup_timer[0]);rn init_timer(&backup_timer[1]);rnrn //初始化<em>定时器</em>rn set_backup_timer(); rnrn return 0;rnrnrnstatic void __exit backup_exit(void)rnrn del_timer(&backup_timer[0]);rn del_timer(&backup_timer[1]);rnrn return;rnrnrnmodule_init(backup_init);rnmodule_exit(backup_exit);rnrnrnrnrnrnrnMAKEFILE:rnrnifneq ($(KERNELRELEASE),)rn obj-m := backup_timer.ornelsern KDIR := /lib/modules/$(shell uname -r)/buildrn PWD := $(shell pwd)rnrndefault:rn $(MAKE) -C $(KDIR) M=$(PWD) modules -I/usr/src/rnclean:rn rm -f *.ko *.mod.c *.orninstall:rn insmod hook.kornuninstall:rn rmmod hook.kornendifrnrnrnrnrn
Linux内核定时器
这是我的课程设计的要求:rn 通过研究内核的时间管理算法学习内核源代码。然后应用这些知识并且使用“信号”建立一种用户空间机制来测量一个多线程程序的执行时间。rn 我对它的理解就是:写一个程序运行时间计数函数,“信号”就是函数间的参数,这里就是被测试程序的指针之类的,然后把参数传递给时间计数函数,得到被测试程序的运行时间。大家看一下我的理解对不对?谢谢!rn我写了一个运行时间计数函数:如下rn[code=C/C++]#include rn#include rn int gettimeofday(struct timeval *tv,struct timezone *tz); rnstrut timeval rnlong tv_sec; /* 秒数 */ rnlong tv_usec; /* 微秒数 */ rn; rngettimeofday把时间保存在结构tv之中.tz一般我们使用NULL来代替. rnvoid function() rn rnunsigned int i,j; rndouble y; rnfor(i=0;i,timeuse); rnexit(0); rnrn[/code]rn rn
进程间通信之-信号量semaphore--linux内核剖析(十)
<em>信号量</em>什么是<em>信号量</em><em>信号量</em>的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。 <em>信号量</em>的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。 为了防止出现因多个程序同时访问一个共享资源而引发的一系列<em>问题</em>,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域
Linux内核信号量-up()和down()
内核<em>信号量</em>类似于自旋锁,当锁关闭时,它不允许内核控制路径继续执行。与自旋锁不同的是,当内核控制路径试图获取内核<em>信号量</em>所保护的忙资源时,相应的进程被挂起,进而会导致进程切换;而自旋锁不会导致进程切换。因此,只有可以睡眠的函数才能获取内核<em>信号量</em>;中断处理程序和可延迟函数都不能使用内核<em>信号量</em>。内核<em>信号量</em>结构如下:/** * 内核<em>信号量</em>结构 */ struct semaphore { /**
内核同步机制之信号量&读写信号量&完成变量
Linux提供两种<em>信号量</em>: 1、内核<em>信号量</em>,由内核控制路径使用 2、System V IPC<em>信号量</em>,由用户态进程使用 从本质上说,它们实现了一个加锁原语,即让等待者睡眠,直到等待的资源变为空闲。 <em>信号量</em> 内核<em>信号量</em>类似于自旋锁,因为当锁关闭着的时候,它不允许内核控制路径继续运行。然而,当内核内核控制路径试图获取内核<em>信号量</em>所保护的忙资源时,相应的进程被挂起。只有在资源被释放时,进程才再次变
Linux内核源码之信号量的实现
之前的一片博客介绍了用于Linux内核同步的自旋锁,即使用自旋锁来保护共享资源,今天介绍另外一种Linux内核同步机制——<em>信号量</em>。<em>信号量</em>在内核中的使用非常广泛,用于对各种共享资源的保护。<em>信号量</em>与自旋锁的实现机制是不一样的,用处也是不一样的。首先,自旋锁和<em>信号量</em>都使用了计数器来表示允许同时访问共享资源的最大进程数,但自旋锁的共享计数值是1,也就是说任意时刻只有一个进程在共享代码区运行;<em>信号量</em>却允许使用
linux2.6内核信号量学习
<em>信号量</em>(semaphore)是用于保护临界区的一种常用方法。只有得到<em>信号量</em>的进程才能执行临界区代码,而没有得到<em>信号量</em>的进程进入休眠等待状态。 Linux系统中与<em>信号量</em>相关的操作主要有如下4种。 1 定义<em>信号量</em> 下面代码定义名为sem的<em>信号量</em>。 struct semaphore sem; struct semaohore结构体在内核中定义如下: 在/include/linux/semap
信号量内核对象(转载)
<em>信号量</em>内核对象 <em>信号量</em>(Semaphore)内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore()创建<em>信号量</em>时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就会减1,只要当前可用资源计数
linux信号量简介(内核态)
一、什么是<em>信号量</em>     1、概念         内核的<em>信号量</em>在概念和原理上与用户态的<em>信号量</em>是一样的,但是它不能在内核之外使用。         <em>信号量</em>又称为信号灯(semaphore),本质上是一种睡眠锁。如果有一个任务试图获得一个不可用(已经被占用)的<em>信号量</em>时,<em>信号量</em>会将其推进一个等待队列,然后让其睡眠。这时处理器能重获自由,从而去执行其他代码。当持有的<em>信号量</em>可用(被释放后),处于等待
LINUX内核信号量设计与实现
介绍LINUX内核的<em>信号量</em>设计与实现,不错
linux内核同步机制之信号量
定义: 如果有一个任务试图获得已经被占用的<em>信号量</em>时,<em>信号量</em>会将其推进一个等待队列,使其睡眠,当持有<em>信号量</em>的进程将<em>信号量</em>释放以后,再唤醒该任务,并获得该<em>信号量</em>。 头文件head.h代码: #ifndef __HEAD_H__ #define __HEAD_H__ #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #incl...
Linux内核之自旋锁和信号量
Linux内核实现了多种同步方法,指令级支持的原子操作、自旋锁、<em>信号量</em>、互斥锁、完成量、大内核锁等等,我就挑比较有代表性的两个锁——自旋锁和<em>信号量</em>来分析。 自旋锁 Linux内核中最常用的锁就是自旋锁(spin lock),自旋锁最多只能被一个执行线程持有。如果一个执行线程试图获得一个被已经持有(即所谓争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新可用。在任意时间,自旋锁都可以
请教信号量问题
这是2002年高程考试上午的一道题问:表达式 A2/(5A+B) 的求值过程,且 A、B 已赋值,若用 PV 操作控制求值过程,需要__(46)__的<em>信号量</em>。rn答案是3个且初值等于0,谁能说明一下?
请教关于信号量问题
这组<em>信号量</em>函数semget(),semop(),semctl()rn和下面这组<em>信号量</em>函数有什么区别吗?rnsem_init(); sem_wait(); int sem_post();
linux内核定时器模板
linux 内核<em>定时器</em>使用模板 摘自宋宝华书中
linux内核定时器 记录
驱动程序中使用timer的几个必要的操作 1.分配 static struct timer_list pwm_timer; 2.设置、添加 pwm_timer.function = pwm_timer_function; pwm_timer.expires  = jiffies + 1*HZ; init_timer(&amp;amp;pwm_timer); 3设置下一次启动的时间 mod_ti...
Linux内核定时器的使用
内核<em>定时器</em>的结构体定义在include/linux/timer.h: struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct list_head entry; unsigned long expires; st
Linux内核 定时器 用法
【前言】     最近在工程中接触到调用 Linux 内核函数配置<em>定时器</em>实现 LED 闪烁效果的代码。对<em>定时器</em>的使用方法写个简单小结。 【概述】     <em>定时器</em>的用法不复杂。调用过程分为以下几步:     1、声明一个 timer。     2、初始化 timer。     3、完善定时中断服务函数。     4、注册 timer 到<em>定时器</em>链表。     5、重新注册 ti
linux内核定时器编程
1.<em>linux内核</em><em>定时器</em>基本结构和函数 1)struct timer_list 一个struct timer_list对应了一个<em>定时器</em>。 #include 以下列出常用的接口: struct timer_list   {    /*....*/    unsigned long expires;//<em>定时器</em>服务函数开始执行时间    void (*f
删除linux内核定时器和工作队列
static void ts_stop_wd_timer(struct ts_data *cd) { if (!TS_WATCHDOG_TIMEOUT) return; TS_LOG_DEBUG(&quot;stop wd\n&quot;); del_timer(&amp;amp;cd-&amp;gt;watchdog_timer); cancel_work_sync(&amp;amp;cd-&amp;gt;watchdog_work); del_...
Linux内核定时器编程
在Linux设备驱动编程中,我们可以利用Linux内核中提供的一组函数和数据结构来完成定时触发工作或着完成某周期性的事务。内核<em>定时器</em>是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制。 被调度的函数肯定是异步执行的,它类似于一种“软中断”,而且是处于非进程的上下文中,所以调度函数必须遵守以下规则: 1. 不能访问用户空间,因为没有进程上下文,无法与特定的进程与用户关
LINUX内核信号量设计与实现.rar
LINUX内核 <em>信号量</em>的设计与实现。学习内核的好工具
linux内核中断和定时器
1.对于学过单片机的我对于中断是有一个很清楚的认识,就是当程序执行的时候,突然发生了一件很重要的事情,将cpu打断,进而cpu去执行中断的事情,在嵌入式中,都是通过读取硬件寄存器来判断是什么中断发生。 2.在<em>linux内核</em>中提供了读取中断寄存器的函数 int int_scs = read_int_status(); 3.申请和释放中断
Linux内核定时器的实例
这是一个Linux内核<em>定时器</em>的实例,可以学习使用
Linux内核定时器timer_list
Linux内核版本:linux-3.0.35 开发板:i.MX6S MY-IMX6-EK200 拟定任务:LED闪烁
Linux内核之定时器详解
前面我们对按键驱动的开发已经基本完成了,但是当你对按键多次按下的时候,你会发现打印的返回值是不正确的,这是什么原因呢?学过51单片机的同学你们都应该知道按键容易产生抖动,俗称“消抖”,我以前的处理办法是设置一个延时10ms,现在我们的按键也是需要延时的,当过了10ms我们在去读这个按键值。 我对<em>定时器</em>的理解如下: static struct timer_list buttons_timer;/
Python系列之信号量、Event、定时器
<em>信号量</em> <em>信号量</em>也是一把锁,可以指定<em>信号量</em>为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,<em>信号量</em>同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么<em>信号量</em>就相当于一群路人争抢公共厕所,公共厕所有多个坑位,这意味着同一时间可以有多个人上公共厕所,但公共厕所容纳的人数是一定的,这便是<em>信号量</em>的大小 from threading import Thread,S...
set_timer定时器,signal信号量求助!!
#include rn#include rn#include rn#include rn#include rnrnint count=0;rn/*<em>定时器</em>*/rnstatic void set_timer()rnrn struct itimerval itv,oldtv;rn itv.it_interval.tv_sec = 1;rn itv.it_interval.tv_usec = 0;rn itv.it_value.tv_sec = 1;rn itv.it_value.tv_usec = 0;rn setitimer(ITIMER_REAL, &itv, &oldtv);rnrn/*计算包数*/rnvoid flow_count()rnrncount++;rnrn/*flow_check*/rnvoid flow_check()rnrnprintf("flow_check");rnrn/*初始化*/rnint main()rnrn signal(SIGALRM, flow_check);rn set_timer();rn flow_count(); rn printf("count:%d\n",count);rn return 0;rnrngcc -Wall 之后什么错误都没报,rn./a.out之后只是输出count:1rn为什么我的程序不能每一秒钟输出一个flow_check。。。。rn该怎么样修改呢~~rn求助~~
Python之信号量,事件,条件与定时器
# 线程<em>信号量</em>与进程<em>信号量</em>概念一样,允许指定个数的线程访问一段代码 # from threading import Thread # from threading import Semaphore # import time # def func(sem): # sem.acquire() # print('func start...') # time.sleep(1) ...
36 linux内核里的HZ定时器与timer_list定时器
在<em>linux内核</em>里的设备驱动常常用到<em>定时器</em><em>定时器</em>功能,而硬件上的<em>定时器</em>通常只有几个,如果每个设备驱动使用一个硬件<em>定时器</em>,那肯定是不够用,所以在<em>linux内核</em>里会把一个硬件<em>定时器</em>的功能扩展成多个软件<em>定时器</em>. 例如: 硬件<em>定时器</em>每秒钟触发检查一次,那么就可以设置如3秒,4秒,10秒的软件<em>定时器</em>. 内核里的HZ<em>定时器</em>就是基于一个硬件的<em>定时器</em>来实现的. 它与内核源码目录的”.config”里的”CO...
关于linux内核定时器timer循环的问题
比如有三个函数f1f2f3,其中f1需要每隔十秒钟调用一次f3函数,f2需要每隔20秒调用f3函数,这个要怎么用timer<em>定时器</em>实现呢,rn我在f1中这样试了一下rnwhile(某个条件)rn。。。timer初始化。。。rn add_timer(&fitimer);rnrn在后面也有del_timer(),结果加载模块时出错卸载不掉,是不是不可以这样写呢,请各位大牛指导,感激不尽。。。>
请教信号量处理函数signal的问题
<em>问题</em>是这个样子的:rnrn有一段如下的代码:rnvoid handler(int sig_number);//<em>信号量</em>处理函数rnint main()rnrn//some code herernrn signal(SIGINT,handler);//安装<em>信号量</em>rnrn//some other code here.rn return 0;rnrnrnvoid handler(int sig_number)rnrn //do something here.rnrnrn当执行到//some other code here.rn这片代码区域的时候,产生了<em>信号量</em>。此时后续rn代码会“中断”执行,转而去执行信号处理函数。rn请问这是一种什么处理机制?rnrn说一说我的看法:rn说是中断,应该不是。严格来说,中断处理函数运行在rn内核态。而<em>信号量</em>处理函数在用户态运行。但是我还是认为rn这里采用了一种类似中断的机制。信号产生的时候,中断当前rn的执行代码,转而去执行<em>信号量</em>处理函数,信号处理函数结束以后rn返回中断的代码处。但是这种机制不就是中断了吗?rn我搞不明白其中的道理,麻烦解释一下?rn谢谢!
关于 信号量问题,请教高手
一个<em>信号量</em> S 是否不能管理三个进程的同步rnrn比如这样对么?rnrnS 的初始值是 1rnrn进程 A rnlooprn P(S)rn step1rn V(S)rnend looprnrn进程 B rnlooprn P(S)rn step2rn step3rn V(S)rnend looprnrn进程 C rnlooprn P(S)rn step4rn V(S)rnend loop
linux内核tcp的定时器管理(一)
在内核中tcp协议栈有6种类型的<em>定时器</em>: 1 重传<em>定时器</em>。 2 delayed ack<em>定时器</em> 3 零窗口探测<em>定时器</em> 上面三种<em>定时器</em>都是作为tcp状态机的一部分来实现的。 4 keep-alive <em>定时器</em> 主要是管理established状态的连接。 5 time_wait<em>定时器</em> 主要是用来客户端关闭时的time_wait状态用到。 6 syn-...
Linux内核定时器理解及编程使用
在理解Linux内核<em>定时器</em>之前,我们首先需要理解几个内核<em>定时器</em>变量,分别是jiffies、HZ。 jiffies:中文意思是瞬间,瞬息。在&amp;lt;linux/jeffies.h&amp;gt;中声明,该变量记录的是系统启动以来,系统产生的总节拍数,该变量在系统启动的时候被初始化为0,接下来每进行一次时钟中断,jiffies自动加1。 HZ:系统<em>定时器</em>能以可编程的频率来中断处理器,此频率即为每秒的<em>定时器</em>...
请教linux定时器问题
想<em>请教</em>大家,如果想把VxWorks中的<em>定时器</em>程序(诸如使用wdstart,wdcancel,wdcreate等),移植到linux时,使用rntimer_create,timer_settime,signal等函数对应使用时,其中的 wdcancel 如何来转换。 谢谢!
请教定时器问题
我做了一个网页,在网页运行后没间隔10s钟就执行一个事件。将在其他页面采集的数据添加到本页面的textbox中。但是运行后怎么textbox中都没有数据呢?哪位高人指点一下小弟啊?rnusing System;rnusing System.Collections;rnusing System.Configuration;rnusing System.Data;rnusing System.Linq;rnusing System.Web;rnusing System.Web.Security;rnusing System.Web.UI;rnusing System.Web.UI.HtmlControls;rnusing System.Web.UI.WebControls;rnusing System.Web.UI.WebControls.WebParts;rnusing System.Xml.Linq;rnusing System.IO;rnusing System.Text;rnusing System.Net;rnrnpublic partial class Enterprise : System.Web.UI.Pagern rn protected void Page_Load(object sender, EventArgs e)rn rn if (!this.IsPostBack)rn rn System.Timers.Timer time = new System.Timers.Timer();rn time.Elapsed += new System.Timers.ElapsedEventHandler(getEnterprice);rn time.Interval = 10000;rn time.AutoReset = true;rn time.Enabled = true;rn rn rn int i = 0;rn private void getEnterprice(object source, System.Timers.ElapsedEventArgs e)rn rn string rl = "http://news.ifeng.com/history/2/shidian/200905/0518_2666_1162111.shtml";rn string r2 = "http://zhidao.baidu.com/question/95169774.html";rn if (i % 2 != 0)rn rn getEn(rl);rn i += 1;rn rn elsern rn getEn(r2);rn i += 1;rn rn rn private void getEn(string ustr)rn rn Uri url = new Uri(ustr);rn System.Net.WebRequest request = System.Net.WebRequest.Create(url);rn System.IO.Stream s = request.GetResponse().GetResponseStream();rn System.IO.StreamReader reader = new System.IO.StreamReader(s, Encoding.Default);rn string str = reader.ReadToEnd();rn this.TextBox1.Text = str;rn reader.Close();rn s.Close();rn rnrn
请教一个定时器问题
如果要在晚上12点钟定时重新启动程序,可以用Timer实现吗,但是Timer只是设置了一个从现在开始的时间段再执行,有没有方法直接比较是否到12点的就执行重启,谢谢。
定时器关闭问题请教
有个待办事项模块,在用户新增一个待办事项的时候会启动一个<em>定时器</em>,在用户指定的时间进行短信提醒,现在有个<em>问题</em>,用户编辑这个待办事项的时候如果修改了提醒时间,我先要将之前的<em>定时器</em>关闭之后再重新开启一个新的<em>定时器</em>,现在的<em>问题</em>是可以通过什么方式或标示找到之前的<em>定时器</em>进行关闭操作rn部分代码:rn//<em>定时器</em>开启rnTimer timer = new Timer();rntimer = timer.schedule(发短信, 用户指定的时间);rn//执行完发短信后关闭<em>定时器</em>rntimer.cancel();
Spring 定时器问题请教
rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn rn 0 24 13 ? * *rn rn rn rnrnrn定时每天13:24执行timerRun,这是没有<em>问题</em>的,测试已通过,rnrn<em>问题</em>:如果 我将每天13:24执行一次, 15:00执行一次 22:00也执行,rnrn在cronExpression 如何配置呀???
请教定时器问题,谢谢
请问这里为什么要除256,取模,谢谢大家rnTH0=(65536-46080)/256;rnTL0=(65536-46080)%256; //定义<em>定时器</em>初值rnrn以下是全部代码rn#include rn#define uchar unsigned charrnuchar count; //全局变量rnvoid time0() interrupt 1 using 0 //<em>定时器</em>0rnrnTH0=(65536-46080)/256;rnTL0=(65536-46080)%256; //重新载入延时时间,如果晶振为12M,则为被减数则为50000rnrncount++;rnif(count==20) //11.0592 晶振精确延时1 秒rnrnP0=~P0;rncount=0;rnrnrnvoid main()rnrnTMOD=0x01; //<em>定时器</em>工作在方式1rnTH0=(65536-46080)/256;rnTL0=(65536-46080)%256; //定义<em>定时器</em>初值rnET0=1; //开<em>定时器</em>0 中断rnEA=1; //开总中断rnTR0=1; //中断开始rnwhile(1);rnrn rn
请教关于定时器问题
我在MFC初始化的时候设置了一个<em>定时器</em>,使用系统默认的回调函数。KillTimer放在了ExitProcess部分。rnrn奇怪的是程序运行一段时间(十多分钟)后就崩溃了。我确定是<em>定时器</em>的原因。rnrn可能是内存泄漏,但是简单的<em>定时器</em>也没有什么泄漏的地方啊,rnrn<em>请教</em>。。。rn
定时器问题请教
请问各位:rn 我打算做一个<em>定时器</em>,每隔一定的时间触发发消息出来,是否一定要用线程?JAVA中是否又TIMER这样的东东?如何做好呢?谢谢!
定时器问题请教
<em>定时器</em>500ms,500ms到了,执行一函数A,问在函数A中能用sleep睡眠 10秒吗?在睡眠10秒内,<em>定时器</em>到了500ms还会启动吗?rn
定时器问题请教高手
各位高手,我现在遇到一个让人迷惑的<em>问题</em>。(Kernel version 2.2.19)rn我的程序结构是这样的:rn1. 有一个HashTable,其节点上有一个timer_list结构,还有一个id号以及一些我用的属性。rn2. 有一个通用的delete函数,它做如下操作:rn a. 先cli关中断。rn b. 如果timer_list不为空,则调用del_timer将其删除。rn c. 用一个全局变量记录下id(这是我后来为了debug而加上的)。rn d. 将id清空为0。rn e. 将该节点从HashTable中去掉。rn f. restore_flags开中断。rn g. 调用kfree_s释放该节点。rn3. 在新建节点时,用add_timer设置timer_list,<em>定时器</em>函数为delete函数。也就是说,delete将在timer_bh里运行。rn4. 在net_bh中,有些特殊的时候,我也会直接调用delete函数来删除节点。由于考虑到net_bh和timer_bh应该是不会重入的,所以我认为这没有<em>问题</em>。rn5. 实际运行中,当系统在大负荷运行下,有时会出现死机,通过LKCD的分析,发现,都死在delete函数的kfree_s处,而节点的数据都没错,唯一奇怪的是在进入delete函数时,id已经为0了,说明以前被删除过。但从代码中我实在是分析不出有什么<em>问题</em>了。rn希望高手能解答。谢谢!rnrnvoid node_delete(struct node *pnode)rnrn unsigned long flags;rnrn save_flags(flags);rn cli();rnrn if (pnode->timer_set) rn del_timer(&pnode->timer);rn pnode->timer_set = 0;rn rnrn // this is for LKCD dump debugrn global_debug = pnode->id;rnrn pnode->id = 0;rnrn // now I unlink the node from HashTablern ...rnrn restore_flags(flags);rnrn // do some other thingsrn ...rnrn kfree_s(pnode, sizeof(struct node));rnrnrnstruct node * node_insert(...)rnrn __u32 key = NODE_KEY(...);rn struct node *pnode;rn unsigned long flags;rnrn if ((pnode = (struct node *)kmalloc(sizeof(struct node), GFP_ATOMIC)) == NULL) rn return NULL;rn rnrn memset(pnode, 0, sizeof(struct node));rnrn // now i set some basic propertiesrn ...rnrn init_timer(&pnode->timer); // timer is a member of struct node, its type is timer_listrn set_node_timer(pnode, MY_TIMEOUT); rnrn save_flags(flags);rn cli();rnrn // link this into HashTablern ...rnrn // gen unique id of node, based on 1, 0 means invalidrn ...rnrn restore_flags(flags);rn return pnode;rnrnrninline void set_node_timer(struct node *pnode, unsigned long when)rnrn unsigned long flags;rnrn if (NULL == pnode) rn return;rn rnrn save_flags(flags);rn cli();rnrn if (pnode->timer_set) rn del_timer(&pnode->timer);rn rnrn pnode->timer.expires = jiffies + when;rn pnode->timer.data = (unsigned long) pnode;rn pnode->timer.function = (node_expire) node_delete;rn pnode->timer_set = 1;rn add_timer(pnode->timer);rnrn restore_flags(flags);rnrnrn// myfun() is called by net_bh in some casesrnvoid myfun()rnrn // some other operationsrnrn if (some_case) rn node_delete(pnode);rn // I found someone says that del_timer may not success in 2.2.xrn // so if it's real, that my process may die, but I didn't so surern // does anyone know something else?rn // ref to http://www.uwsg.iu.edu/hypermail/linux/kernel/0005.3/0269.htmlrn rnrn // other operations...rn
请教定时器问题
<em>请教</em>各位,C#里最多可以同时开多少个系统<em>定时器</em>,<em>定时器</em>多了会不会失效啊?
请教定时器问题
在LINUX的C++中,假如一个进程将属于该进程的三个<em>定时器</em>全部利用,会对程序产生什么影响?
请教SVG定时器问题
我想在svg定时执行数据更新,把setInterval写在script或外部js中,rn发现必须把svg嵌入到html文件中才能执行<em>定时器</em>的代码,直接运行svg却不行。rnrn<em>请教</em>高手们,可以直接让svg执行定时事件吗?
有关定时器问题,请教!
本人做一基于对话框的程序,然后自定义一从CWnd派生的类,在其中设定了Timer.但为何该<em>定时器</em>没起作用?郁闷!
请教,Linux内核
我自定义的内核,把SATA和scsi都编译了,用busybox做的系统,在一台PC上面运行起来别的都好着就是,用fdisk看不到硬盘,只是把系统在内存中运行,proc/scsi/scsi也没用东西,请问这是什么<em>问题</em>
内核信号量--来自深入理解Linux内核
<em>信号量</em> Linux提供两种<em>信号量</em>: 内核<em>信号量</em>,由内核控制路径使用; System V IPC<em>信号量</em>,由用户态进程使用; 内核<em>信号量</em> 1、内核<em>信号量</em>类似于自旋锁,当锁关闭时,不允许内核控制路径继续前进; 2、当内核控制路径想要获取内核<em>信号量</em>所保护的资源时,若资源被占用,则当前进程被挂起,等待; 3、当资源释放时,选择一个或多个等待该资源的进程唤醒,继续执行; 4、只有可以睡眠的函数才能过获...
Linux内核中的互斥操作(1)——信号量
*看了一段时间Linux内核源代码了,经常会在代码中看到down()、up()、spin_lock()、spin_unlock()、read_lock()、write_lock()、read_unlock()、write_unlock()等函数。本篇就先来看down()、up()是干什么的。。。它们的底层都是如何实现的。。。→_→*
linux内核 信号量、自旋锁、completion、互斥体、延时函数
      访问共享资源的代码区域称为临界区( critical sections),临界区需要被以某种互斥机制加以保护,方法有中断屏蔽、原子操作、自旋锁和<em>信号量</em>等。        在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发&quot;竞态&quot;,因此我们必须对共享资源进行并发控制。Linux内核中解决并发控制的最常用方法是自旋锁与<em>信号量</em>(绝大多数时候...
请教一些与Linux内核安全相关的问题
抱歉,本人白目,对这方面的概念很不熟悉。rnrn我首先想<em>请教</em>的是,内核空间和用户空间的分离,是不是主要就是从安全角度考虑的?rnrn其次,从用户空间影响内核空间,都有哪些方式?我能想到的有,通过系统调用,通过内存映射(但mmap()本身也是系统调用),通过加载模块(但加载模块的命令本身也是系统调用?),然后我就想不到了。我说得对吗?还有哪些?rnrn然后就是,攻击内核有哪些方式?能稍微说一下细节么?rnrn最后就是,通过攻击拿到root权限,是不是就是无敌了,想在内核里干什么就干什么,相当于控制了整个内核以及硬件?还是说,其实也只有有限的能力能干坏事?rnrn感谢。
请教一个Linux内核桥的问题
我现在看的内核是2.6.34.8,在br_flood函数内看到如下的代码:rnrnlist_for_each_entry_rcu(p, &br->port_list, list) rnprev = maybe_deliver(prev, p, skb, __packet_hook);rnif (IS_ERR(prev))rngoto out;rnrnrnmaybe_deliver函数内又调用了should_deliver函数来判断是否应该转发。rnrn我现在想到了一种情况,就是若在通过list_for_each_entry_rcu遍历br->port_list时,若p是收到此skb的端口,又恰好是br->port_list的第一个端口,是否有<em>问题</em>?rnrn此时,maybe_deliver函数内的should_deliver判断不应该转发,导致maybe_deliver返回的prev还是NULL,IS_ERR判断出错,即直接goto out,但实际还有很多端口未遍历。rnrn我想内核应该不会犯这么低级的错误,但始终没想明白。请各位大侠指导下!!谢谢!!
出看linux内核,问题请教
[code=C/C++]rn// 为新进程取得不重复的进程号last_pid,并返回在任务数组中的任务号(数组index)。rnintrnfind_empty_process (void)rnrn int i;rnrnrepeat:rn if ((++last_pid) < 0)rn last_pid = 1;rn for (i = 0; i < NR_TASKS; i++)rn if (task[i] && task[i]->pid == last_pid)rn goto repeat;rn for (i = 1; i < NR_TASKS; i++) // 任务0 排除在外。rn if (!task[i])rn return i;rn return -EAGAIN;rnrn[/code]]rnlast_pid 在上面定义为0,也就是0号进程(祖先进程)岂不会永远的去执行goto语句,那下面的for循环就不会执行了?
关于linux内核问题请教高手。
虚拟地址空间分为两个部分:用户空间和系统空间。在用户模式下只能访问用户空间而在核心模式下可以访问系统空间和用户空间。系统空间在每个进程的虚拟地址空间中都是固定的,而且由于系统中只有一个内核实例在运行,因此所有进程都映射到单一内核地址空间。内核中维护全局数据结构和每个进程的一些对象信息,后者包括rn ----------------------------------------------------------------------------------rn的信息使得内核可以访问任何进程的地址空间。通过地址转换机制进程可以直接访问当前进程的地址空间(通过rn------------------------------------rnMMU),而通过一些特殊的方法也可以访问到其它进程的地址空间。rnrnrn有下划线的地方不懂,还有用户栈和内核栈,假设一个线程不回进入内核态,他也有内核栈指针吗? rn
请教一个Linux内核桥的问题
我现在看的内核是2.6.34.8,在br_flood函数内看到如下的代码:rnrn list_for_each_entry_rcu(p, &br->port_list, list) rn prev = maybe_deliver(prev, p, skb, __packet_hook);rn if (IS_ERR(prev))rn goto out;rn rnrnmaybe_deliver函数内又调用了should_deliver函数来判断是否应该转发。rnrn我现在想到了一种情况,就是若在通过list_for_each_entry_rcu遍历br->port_list时,若p是收到此skb的端口,又恰好是br->port_list的第一个端口,是否有<em>问题</em>?rnrn此时,maybe_deliver函数内的should_deliver判断不应该转发,导致maybe_deliver返回的prev还是NULL,IS_ERR判断出错,即直接goto out,但实际还有很多端口未遍历。rnrn我想内核应该不会犯这么低级的错误,但始终没想明白。请各位大侠指导下!!谢谢!!
Python0226-19(多线程-join、死锁、信号量定时器、事件)
1、join daemon join :挂起主线程,待当前线程结束后,再继续执行挂起主线程(可以指定挂起时间) daemon:设置守护线程 2、死锁 和 可重入锁(递归锁)Rlock 锁中锁 3、<em>信号量</em>Semaphore 4、<em>定时器</em> Timer 5、事件Event 6、线程队列 ...
关于linux内核版本问题请教
请问各位,内核版本发布的时候是不是分32 位和64位?还是32位和64位是在一个包里面,编译内核出来的镜像既可以用在32位也可以用在64位系统上?有点迷糊,跪求指点!!!
请教信号量的一道题
<em>请教</em><em>信号量</em>的一道题rn这是2002年高程考试上午的一道题问:表达式 A2/(5A+B) 的求值过程,且 A、B 已赋值,若用 PV 操作控制求值过程,需要__(46)__的<em>信号量</em>。rn答案是3个且初值等于0,<em>请教</em>为何??? rn
python多线程 信号量、Event事件、定时器、队列
守<em>信号量</em> Semaphore管理一个内置的计数器, 每当调用acquire()时内置计数器-1; 调用release() 时内置计数器+1; 计数器不能小于0;当计数器为0时,acquire()将阻塞线程直到其他线程调用release()。 from threading import Thread from threading import Semaphore # ...
请教定时器问题。如何启动
我在主对话框启动后,弹出第二个对话框,在第二个对话框(里面就个进度条)中我在他的ontimer中写了这么一段代码让它进度条来回滚。rn第一个对话框中的代码;rnvoid CupdateDlg::OnOK() rnrn // TODO: Add extra validation herernrn CString csParam = AfxGetApp()->m_lpCmdLine;rn CUpdate objUpdate(csParam);rn objUpdate.Initial();rn CDlgUpdateProgress dlgProgress; // 进度条对话框rn dlgProgress.Create(IDD_DLG_PROGRESS1, AfxGetApp()->GetMainWnd());rn dlgProgress.ShowWindow(SW_NORMAL);rn objUpdate.Update(); // 第一个对话框的处理过程rn dlgProgress.CloseWindow();rn objUpdate.Uninitial();rn rn CDialog::OnOK();rnrnrnrn第二个对话框中的代码:rnvoid CDlgUpdateProgress::OnTimer(UINT nIDEvent) rnrn int i = 0;rn for(i = 0; i < 100; i++)rn rn m_prgUpdatePrg.SetPos(i);rn m_prgUpdatePrg.UpdateWindow();rn UpdateWindow();rn Sleep(100);rn rn rn rn CDialog::OnTimer(nIDEvent);rnrnrnrnBOOL CDlgUpdateProgress::OnInitDialog() rnrn CDialog::OnInitDialog();rn rn // TODO: Add extra initialization herern m_prgUpdatePrg.SetRange(0, 100);rn SetTimer(1, 2000, 0);rn rn return TRUE; // return TRUE unless you set the focus to a controlrn // EXCEPTION: OCX Property Pages should return FALSErnrnrnrn主要目的是:在第一个对话框在处理数据时,弹出进度条来回滚,直到处理完毕.rnrn现在<em>问题</em>是<em>定时器</em>的操作怎么没有进入,谁知道这样做哪里出<em>问题</em>了,谢谢rn
请教定时器问题,帮帮忙吧
我在vs2008下,想实现在固定时间段的时间点调用某一函数,例如每周二的上午10点30分输出一段话。是不是用Settimer,貌似不好使啊。请大家帮帮吗?最好给点详细的代码,我是新手^_^。谢谢!!!
请教定时器调用函数问题
<em>定时器</em>中调用一个函数,如果定时到而函数没执行完,<em>定时器</em>将怎样工作。谢。
请教高手关于定时器问题
我现在用createwindow创建了多个窗口,然后设定一个与主窗口相关的<em>定时器</em>,在这个<em>定时器</em>里向其它的窗口不停的发WM_PAINT消息,为什么<em>定时器</em>的处理过程不触发呢?当只有一个窗口的时候是正常的!
请教定时器方面的问题
请问,8号中断与1c号中断的<em>定时器</em>有什么区别吗,为什么我编的8号中断<em>定时器</em>程序在98下可以运行,但在实模式下为什么不能运行
请教:一个定时器问题,谢谢
<em>请教</em>:rn 书上有段话:rn预分频计数器使用某个常量来控制 pclk 的分频。 这样可实现控制<em>定时器</em>分辨率和<em>定时器</em>溢出之间的关系。 预分频计数器每个 pclk 周期。当其达到预分频寄存器中保存的值时,<em>定时器</em>计数器加 1,预分频计数器在下一个 pclk 周期复位。这样 当 PR=0 时,<em>定时器</em>计数器 每个 plck rn周期加 1 ;当 PR=1 时,<em>定时器</em>计数器每 2 个 pclk 周期加 1。rnrnrn*******************************************************************rnrn各位大哥:rn rn<em>问题</em>1:rn 为什么 预分频计数器要在下一个 pclk 周期复位 呢?rn 这样处理有什么好处呢?rnrn<em>问题</em>2:rn 当 PR=1 时,<em>定时器</em>计数器每 2 个 pclk 周期加 1。rn 这不是不符合:当其达到预分频寄存器中保存的值时<em>定时器</em>计数器加 1。rn 吗?rnrn谢谢!rn
请教一个linux定时器问题
#include rn#include rn#includern#include rn#include rn#include rn#include rnusing namespace std;rnrnstatic char msg[] = "time is running out\n"; rnstatic int len; rnrn// 向标准错误输出信息,告诉用户时间到了 rnvoid prompt_info(int signo) rn rn write(STDERR_FILENO, msg, len); rn rnrn// 建立信号处理机制 rnvoid init_sigaction(void) rn rn struct sigaction tact; rn rn /*信号到了要执行的任务处理函数为prompt_info*/ rn tact.sa_handler = prompt_info; rn tact.sa_flags = 0; rn /*初始化信号集*/ rn sigemptyset(&tact.sa_mask); rn /*建立信号处理机制*/ rn sigaction(SIGALRM, &tact, NULL); rn rnrnvoid init_time() rn rn struct itimerval value; rn rn /*设定执行任务的时间间隔为2秒0微秒*/ rn value.it_value.tv_sec = 2; rn value.it_value.tv_usec = 0; rn /*设定初始时间计数也为2秒0微秒*/ rn value.it_interval = value.it_value; rn /*设置计时器ITIMER_REAL*/ rn setitimer(ITIMER_REAL, &value, NULL); rn rnrnint main() rn int count=0;rn len = strlen(msg); rn init_sigaction(); rn init_time(); rn while ( count<< "Hello!"; rn count++;rn rn // exit(0);rnrn我想<em>请教</em>一下上述代码中rn while ( count<< "Hello!"; rn count++;rn rn为什么count<10不起作用?输出十次Hello!后还是不停的输出hello,为什么?应该怎么改?
请教 CListView 和 定时器的奇怪问题
视图类 class CSMSDAOView : public CListViewrnrnrn设置<em>定时器</em>rnint CSMSDAOView::OnCreate(LPCREATESTRUCT lpCreateStruct) rnrn if (CListView::OnCreate(lpCreateStruct) == -1)rn return -1;rn rn // TODO: Add your specialized creation code herern SetTimer(1,1000,NULL);rn return 0;rnrnrn响应<em>定时器</em>事件rnvoid CSMSDAOView::OnTimer(UINT nIDEvent) rnrn // TODO: Add your message handler code here and/or call defaultrnrnTRACE("OnTimer \n");rn CListView::OnTimer(nIDEvent);rnrnrnrn现在的<em>问题</em>是只响应两次,然后就再也没有OnTimer事件了,点一下视图窗口,就出现一次,然后又没有了。rnrnrn没办法只好把<em>定时器</em>及处理 放到CMainFrame中,这时一切正常。rnrnrn
请教关于定时器问题,急!
请问在windows console 做的程序里怎么用settimer ?rn请给我一个很简单的例子。
请教有关VSYNC和定时器问题
1、请问VSYNC一般做些什么工作?rnrn2、如果我需要一个精确定时的<em>定时器</em>来计数,如何实现最好?(不使用硬件<em>定时器</em>)
请教多媒体定时器的有关问题
从别处移植了一个数据采集程序,其中多媒体<em>定时器</em>的设置及使用语句如下添加,但不知为什么build时出错,还请大侠指教一下!rnrn在视图PreTestSysView.cpp文件中加入如下对头文件的包含:rn#include rnrn在 CPreTestSysView::CPreTestSysView()构造函数中加入下一句:rn timeBeginPeriod(timerRes);rnrn在~CPreTestSysView::CPreTestSysView() 中加入如下一句:rn timeKillEvent(timerID);rnrn在OnInitialUpdate() 中加入代码如下:rnvoid CPreTestSysView::OnInitialUpdate() rnrn CView::OnInitialUpdate();rn rn // TODO: Add your specialized code here and/or call the base classrn TIMECAPS tc;rn if(timeGetDevCaps(&tc,sizeof(TIMECAPS))==TIMERR_NOERROR)rn rn timerRes=min(max(tc.wPeriodMin,TIMER_ACCURACY),tc.wPeriodMax);rn rnrnrnrn在实现采样启动的函数中调用timerID=timeSetEvent(pDoc->aPapameter.m_intervalvalueSet,timerRes,TimeProc,30,TIME_PERIODIC);rnrn不知道为什么build时显示如下出错信息:rn-------------------Configuration: PreTestSys - Win32 Debug--------------------rnLinking...rnPreTestSysView.obj : error LNK2001: unresolved external symbol __imp__timeBeginPeriod@4rnPreTestSysView.obj : error LNK2001: unresolved external symbol __imp__timeKillEvent@4rnPreTestSysView.obj : error LNK2001: unresolved external symbol __imp__timeSetEvent@20rnPreTestSysView.obj : error LNK2001: unresolved external symbol __imp__timeGetDevCaps@8rnPreTestSysView.obj : error LNK2001: unresolved external symbol __imp__timeEndPeriod@4rnDebug/PreTestSys.exe : fatal error LNK1120: 5 unresolved externalsrnError executing link.exe.rnrnPreTestSys.exe - 6 error(s), 0 warning(s)
请教关于定时器的简单问题
1.Timer的interval是毫秒值吧?rn2.Timer的interval的最大值是多少,好象是6万多吧,那么最大也就是1分钟吗?rn3.如果我想实现24小时的定时,如果使用<em>定时器</em>,请问如何处理?
信号量问题
HANDLE CreateSemaphore(rn LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,rn LONG lInitialCount,rn LONG lMaximumCount,rn LPCTSTR lpNamern);rn这里面的最大<em>信号量</em>是什么意思啊?(lMaximumCount)rn应该如何设置其大小?
信号量问题
各位大侠,在APUE(UNIX高级环境编程)信号那一节,有这样一段代码rnrn[code=C/C++]sigset_t newmask, oldmask;rnrnsigemptyset(&newmask);rnsigemptyset(&oldmask);rnsigaddset(&newmask, SIGINT);rnrn//block SIGINT and save current signal maskrnif(sigprocmask(SIG_BLOCK,&newmaks,&oldmask)), 如果在这个时间rn窗口之间发生其它信号,进程会捕捉不到 进程可能被永远挂起,我不能理解,为什么这儿这个时间窗口会导致进程捕获不到其他信号,因为解除对SIGINT阻塞后,一般来说,系统会立即执行SIGINT信号的处理函数,这时发生其它信号,不会被阻塞的呀,只会阻塞SIGINT本身,严重不明白,望各位大侠指教
wpf 学习资料(2)下载
自己在学习WPF 时看过的所有资源,希望对大家有所帮助 相关下载链接:[url=//download.csdn.net/download/fengzijun_2009/4601225?utm_source=bbsseo]//download.csdn.net/download/fengzijun_2009/4601225?utm_source=bbsseo[/url]
一键刷 BOOT、RECOVERY、RADIO下载
一键刷 BOOT、RECOVERY、RADIO 相关下载链接:[url=//download.csdn.net/download/a757625008/4744602?utm_source=bbsseo]//download.csdn.net/download/a757625008/4744602?utm_source=bbsseo[/url]
中控考勤通用驱动下载
中控考勤通用驱动 相关下载链接:[url=//download.csdn.net/download/sczmawq/6874025?utm_source=bbsseo]//download.csdn.net/download/sczmawq/6874025?utm_source=bbsseo[/url]
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件
我们是很有底线的