Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363839
  • 博文数量: 53
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1143
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-14 11:53
文章分类

全部博文(53)

文章存档

2011年(1)

2008年(52)

我的朋友

分类:

2008-09-22 19:59:22

/* includes */
#include "vxWorks.h"
#include "taskLib.h"
#include "sysLib.h"
int tid;
 
/* task function */
void myFunc(void)
{
    int i;
    printf("Hello, I am task %d\n", taskIdSelf()); /* Print task Id */
    for (i = 0; i < 10; i++)
    {
        printf("%d ", i);
        taskDelay(sysClkRateGet() / 2);
    }
}
 
/* suspend and resume task */
void suspendResumeMyTask(void)
{
    taskDelay(sysClkRateGet() *3);
    taskSuspend(tid);
    printf("my task is suspended\n");
    taskDelay(sysClkRateGet() *3);
    taskResume(tid);
}
 
/* user entry */
void user_start()
{
    printf("ready to begin new tasks\n");
    tid = taskSpawn("myTask", 90, 0x100, 2000, (FUNCPTR) myFunc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    taskSpawn("suspendResumeMyTask", 90, 0x100, 2000, (FUNCPTR) suspendResumeMyTask, 0, 0,
               0, 0, 0, 0, 0, 0, 0, 0);
}
  我们可以使用taskSuspend()函数挂起一个任务的运行,这个任务只有获得对应的taskResume()后才能再次运行,这两个API的原型为:
extern STATUS taskSuspend (int tid);
extern STATUS taskResume (int tid);
 
运行输出:
Hello, I am task 17753664
0 1 2 3 4 5 my task is suspended
6 7 8 9
这个程序运行3秒后,suspendResumeMyTask任务挂起了myTask,输出“my task is suspended”。suspendResumeMyTask本身延迟3秒后恢复myTask,使得myTask再次输出“6 7 8 9”。显然,“6 7 8 9”与“0 1 2 3 4 5”的输出之间间隔了3秒以上的时间。
阅读(4017) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~