Chinaunix首页 | 论坛 | 博客
  • 博客访问: 421152
  • 博文数量: 247
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 1005
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-10 10:39
文章分类

全部博文(247)

文章存档

2015年(3)

2014年(21)

2013年(53)

2012年(170)

分类:

2012-12-11 21:47:20

原文地址:linux 内核线程示例 作者:HYYLINUX

#include

struct powerkey_t
{
    ...
    struct tast_struct *p_thread;
    ...
}


static struct powerkey_t pwk;

static int create_powerkey_thread(void)
{
    struct powerkey_t *ppwk = &pwk;
    pr_debug("%s\n",__FUNCTION__);
    ppwk->p_thread = kthread_run(&powerkey_thread,NULL,"powerkey thread");
    if(ppwk->p_thread == NULL){
        pr_debug("%s failed\n",__FUNCTION__);
        return -1;
    }
    return 0;
}

static void delete_powerkey_thread(void)
{
    struct powerkey_t *ppwk = &pwk;
    pr_debug("%s\n",__FUNCTION__);

    if(ppwk->p_thread)
        kthread_stop(ppwk->p_thread);

    ppwk->p_thread = NULL;
}


static int powerkey_thread(void *data)
{
    struct powerkey_t *ppwk = &pwk;
    long ret;

    pr_debug("%s\n",__FUNCTION__);
    
    while(!kthread_should_stop())
    {
        ...
        //schedule_timeout();
        ...
    }
    pr_debug("%s exit!\n",__FUNCTION__);
    return 0;
}

static int pmb_probe(struct platform_device *dev)
{
    int ret;    
    ...
    create_powerkey_thread();
    ...
    return 0;
}

static int pmb_remove(struct platform_device *dev)
{
    int ret;
    struct powerkey_t *ppwk = &pwk;
    pr_debug("%s\n",__FUNCTION__);
    ...
    delete_powerkey_thread();
    ...
    return 0;
}

阅读(179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~