小编Daw*_*odo的帖子

FragmentTabHost - 在第一次查看之前,标签不可寻址

我使用的是多选项卡的FragmentTabHost(构造如图所示这里).但是,我无法使用getFragmentByTag(在这种情况下返回null)随机地查找我的选项卡,除非通过至少单击选项卡一次激活已解决的选项卡.

FragmentTabHost似乎延迟了标签的创建,直到我们确实需要它们(也就是用户点击它并想要查看它).
有没有办法强制主机立即创建它们,以便我可以通过getFragmentByTag安全地访问它们?
或者是否可以"自己创建"标签并将它们添加到TabHost?

android android-tabhost android-fragments

15
推荐指数
1
解决办法
233
查看次数

perf_event_open溢出信号

我想计算某些代码的(或多或少)确切数量的指令.此外,我希望在通过特定数量的指令后收到信号.

为此,我使用perf_event_open提供的溢出信号行为 .

我正在使用manpage建议实现溢出信号的第二种方式:

信号溢出

可以设置事件以在超过阈值时传递信号.使用poll(2),select(2),epoll(2)和fcntl(2),系统调用来设置信号处理程序.

[...]

另一种方法是使用PERF_EVENT_IOC_REFRESH ioctl.这个ioctl增加了一个计数器,每次事件溢出时减少.当非零时,溢出时发送POLL_IN信号,但一旦值达到0,就会发送类型为POLL_HUP的信号,并禁用基础事件.

PERF_EVENT_IOC_REFRESH ioctl的进一步说明:

PERF_EVENT_IOC_REFRESH

非继承溢出计数器可以使用它来为参数指定的多个溢出启用计数器,之后禁用它.此ioctl的后续调用将参数值添加到当前计数.设置POLL_IN的信号将在每次溢出时发生,直到计数达到0; 当发生这种情况时,发送设置了POLL_HUP的信号并禁用该事件.使用0的参数被视为未定义的行为.

一个非常小的例子看起来像这样:

#define _GNU_SOURCE 1

#include <asm/unistd.h>
#include <fcntl.h>
#include <linux/perf_event.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

long perf_event_open(struct perf_event_attr* event_attr, pid_t pid, int cpu, int group_fd, unsigned long flags)
{
    return syscall(__NR_perf_event_open, event_attr, pid, cpu, group_fd, flags);
}

static void perf_event_handler(int signum, siginfo_t* info, void* ucontext) {
    if(info->si_code != POLL_HUP) {
        // Only POLL_HUP should happen.
        exit(EXIT_FAILURE);
    }

    ioctl(info->si_fd, PERF_EVENT_IOC_REFRESH, 1); …
Run Code Online (Sandbox Code Playgroud)

linux signals perf

9
推荐指数
1
解决办法
3103
查看次数