- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 timer_create
在 Linux 中创建一个计时器。回调原型(prototype)为:
static void TimerHandlerCB(int sig, siginfo_t *extra, void *cruft)
我如何传递用户数据,以便我可以在计时器到期后调用的回调中接收相同的数据。
这是我的示例代码:
int RegisterTimer(iDiffInTime)
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_SIGINFO; /*call our handler*/
sa.sa_sigaction = TimerHandlerCB;/*Event handler to be called after timer expires*/
if(sigaction(SIGRTMAX, &sa, NULL) < 0)
{
perror("sigaction");
return 1;
}
// Setup the timer
sigevent sigev;
timer_t timerid = 0;
memset(&sigev, 0, sizeof(sigev));
sigev.sigev_notify = SIGEV_SIGNAL;
sigev.sigev_signo = SIGRTMAX;
sigev.sigev_value.sival_ptr = &timerid;
timer_t timerid;
if (timer_create(CLOCK_REALTIME, &sigev, &timerid) == 0)
{
printf("Timer created\n");
struct itimerspec itval, oitval;
itval.it_value.tv_sec = iDiffInTime * 1000;
itval.it_value.tv_nsec = 0;
itval.it_interval.tv_sec = 0;
itval.it_interval.tv_nsec = 0;
//Populate handles required in TimerCallback
Display_Handle hDisplay = ......//
Buffer_Handle hBuf = .....//
if (timer_settime(timerid, 0, &itval, &oitval) != 0)
{
perror("time_settime error!");
return 1;
}
}
else
{
perror("timer_create error!");
}
return 0
}
我在哪里传递 hDisplay
和 hBuf
以便我可以在 TimerHandlerCB
中接收它们?
最佳答案
你已经在做了:
sigev.sigev_value.sival_ptr = &timerid;
您可以在其中指定任何内容(指定 &timerid
通常用于区分多个计时器,但不是必需的)。现在在你的处理程序中:
static void timer_handler(int signo, siginfo_t *si, void *uc)
{
/* si->si_value.sival_ptr */
}
引自 TLPI
When calling timer_create(), evp.sigev_value.sival_ptr is typically assigned the address of the timerid argument given in the same call. Alternatively, evp.sigev_value.sival_ptr may be assigned the address of a structure that contains the timerid given to timer_create()
关于c++ - 使用 timer_create 传递用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5947395/
This question already has answers here: Using Variable for Thread group Ramp up time (3个答案) 3年前关闭。 从
我希望使用 RPyC 为硬件板提供 API 作为服务。该板一次只能满足一个用户的需求。有什么方法可以让 RPyC 强制执行一次只有一个用户可以访问吗? 最佳答案 我不确定这是否有效(或有效),但您可以
如果我想以每秒 10 个请求运行测试。如何让 Jmeter 选择每秒处理该请求数所需的最佳线程数。 我将线程数设置为与每秒请求数相同。 最佳答案 您可以使用恒定吞吐量计时器 click here你只需
我正在尝试进行查询以检查客户表并返回过去 30 天、过去 365 天和所有时间具有特定值的用户数。 所有时间的计数很简单: $stmt = $conn->prepare("SELECT count(i
我是一名优秀的程序员,十分优秀!