设为首页 加入收藏

TOP

QNX 上的多线程编程
2014-11-24 11:55:12 来源: 作者: 【 】 浏览:0
Tags:QNX 线程 编程

在QNX 文本界面编程除了简单的键盘输入,控制台输出以外,还有好多重要的知识点需要学习,包括多线程,线程同步,进程通讯,资源管理器(硬件驱动)等等。


首先了解一下QNX环境下的多线程编程。QNX环境实现了多线程并发,多线程切换时的复杂处理已经由内核实现了,开发人员需要做的就是创建启动线程。


在QNX下创建线程的方法是pthread_create方法,使用时需要导入pthread.h头文件,pthread_create方法定义如下:(再次强调,QNX的“API”文档:library reference一书很重要,从中可以找到更多细节)


int pthread_create( pthread_t* thread,
const pthread_attr_t* attr,
void* (*start_routine)(void* ),
void* arg );


看方法的定义总是不如看样例来的容易,下面是创建线程的最简单方法:


pthread_create( NULL, NULL, &myMethod, NULL );


其中myMethod是希望线程进入的方法,其它参数为空,其它参数是用于记录线程ID,给方法传入参数用的,在这里一概忽略,目的是简化测试环境。


在我的测试代码中实现如下:


void* myMethod(void* arg) {


int i=0;
for (i=0;i<10000;i++)
{
printf("sub thread printing:%d \n",i);
}


return 0;
}



注意在C语言中有严格的编译顺序,myMethod方法的定义必须放在pthread_create(NULL,NULL,&myMethod,NULL);之前,否则编译会报错,说找不到方法myMethod.


另外,主线程在创建子线程后不能马上结束,因为主线程一旦结束子线程就不再运行了,我的main方法实现如下,在没有好办法之前先通过空循环保证主线程不结束,后面再介绍其它正式的做法:



int main(int argc, char *argv[]) {
printf("Starting Thread Test\n");


pthread_create( NULL, NULL, &myMethod, NULL );


int i=0;
int j=0;


for (i=0;i<10000;i++)
{
printf("main thread printing:%d \n",i);


for (j=0;j<10000;j++)


{}
}


return 0;



}


程序测试结果是主线程和子线程都在控制台循环输出。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇QNX程序的键盘输入与控制台输出 下一篇第一个BeagleBoard上的QNX程序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)