当前位置: 技术问答>linux和unix
linux下的两个问题,请教
来源: 互联网 发布时间:2016-03-03
本文导语: 1.linux下要怎样实现多定时器呢,就像windows下有SetTimer能创建定时器ID,再处理函数中分别对应不同ID不同处理,linux下有没?或介绍下这样的思路。 2.windows下有PostThreadMessage来对指定的线程号发送个消息以及传递参数...
1.linux下要怎样实现多定时器呢,就像windows下有SetTimer能创建定时器ID,再处理函数中分别对应不同ID不同处理,linux下有没?或介绍下这样的思路。
2.windows下有PostThreadMessage来对指定的线程号发送个消息以及传递参数。linux下有怎么实现的呢?主要是要传递参数过去。信号好像不能吧,望达人详细指点!谢谢,在线等!
2.windows下有PostThreadMessage来对指定的线程号发送个消息以及传递参数。linux下有怎么实现的呢?主要是要传递参数过去。信号好像不能吧,望达人详细指点!谢谢,在线等!
|
http://wenfh2020.bokee.com/6502982.html
请参考
请参考
|
一个跟多个有什么区别? 用最大公约数。
|
我们一般是自己作一个定时器数组(链表),数组中记录的时这个定时器的信息,比如说时长和定时器编号,然后向系统申请一个定时器,每次定时器超时后处理自己维护的定时器数组,也就是每个时长都减去一,这样,当某一个数减到零后,这个定时器就超时了。
|
2 linux 有msgsend和msgrcv
参考 UNIX环境高级编程
参考 UNIX环境高级编程
|
两种方式,一种是alarm,用一个统一的定时器处理所有的请求,在处理函数里再对不同请求做判断,比如:
if(time % 100)
....
else if(time % 1000)
....
这样就相当于有两个timer,一个是100s,一个是1000s
另一种是用setitimer函数。alarm会合并所有请求,而setitimer不会,不同的线程可以有不同的timer。
用setitimer需要链接rt库,链接时加上-rt
if(time % 100)
....
else if(time % 1000)
....
这样就相当于有两个timer,一个是100s,一个是1000s
另一种是用setitimer函数。alarm会合并所有请求,而setitimer不会,不同的线程可以有不同的timer。
用setitimer需要链接rt库,链接时加上-rt
|
至于线程间同步有几种方式,比如条件变量和信号量(sem)。可以为需要的线程定义专门的信号量,这样就可以给特定的线程发信号。
或者直接发信号(signal,不是sem),虽然所有线程都会收到signal,不过只要不截获就不会有问题。
还有一种方式是使用全局变量,线程去轮询这个变量。
或者直接发信号(signal,不是sem),虽然所有线程都会收到signal,不过只要不截获就不会有问题。
还有一种方式是使用全局变量,线程去轮询这个变量。