想做一个c语言程序,,类似银行排队叫号,关于定时器的问题

假设办理业务的用户源源不断,每个窗口同时工作,1窗口接客后state1=1,(1表示忙碌),这时开始计时(计时10s),期间代码跳到其他段,指示其他窗口的工作窗口,怎么让这个要求实现:只要开始计时满10s,无论代码执行到了哪个地方,都先停下来执行对窗口1的状态的改变state1=0;改变完后继续执行刚才未完的代码

你应该把自己的需求分解一下
1.如果你的每个窗口都是一个单独线程的话;
除非你用了底层中断,当成窗口从忙碌切到闲置时,发送中断信号。保存现场和函数切换,一般由系统来处理。
2. 如果你不是多线程并行;
那么执行本身在任务应用级别是串行的,你需要做的是,把你操作分解到原子操作,每个原子操作后又一定的状态检测;但是务必高效,比如64个子窗口进程,用一个longlong 64个bit,用位操作比较。切任务保存现场就需要你自己来做了。追问

= =回答得很专业。。。可是我真的听不明白,没学过java,百度了一下貌似原子操作时java常用术语?我不是多线程操作。。。我问这个的目的是:有没有什么库函数可以让我直接用啊?

追答

    原子操作虽在java中使用比较多,但也只是一个概念,多线程处理肯定会涉及。也比较好理解

    你不是多线程的话,怎么可能在其他窗口工作的时候,1号窗口的状态能发生变化呢?程序的执行都是顺序性执行的

    定时器其实也算是一个多线程概念,你这样理解:定时器和你的当前任务是同时在进行的。

    signal() http://baike.baidu.com/view/64630.htm ,模拟系统处理异常中断的方式,用软中断完成你的需求。找个linux任务调度的看一看也许对你更有帮助。


       个人也是linux系统的初学者,多线程和信号编程都比较弱,只有些肤浅了解。

望有高人更多指点,也同关注一下。

温馨提示:内容为网友见解,仅供参考
无其他回答

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答