love li fang fang forever

为什么要写这个日志--献给王婷-线程

• _posts

迁移源地址为:《为什么要写这个日志–献给王婷-线程》

昨天更新了一下服务器端和客户端的内容,里面涉及到了线程的概念,刚刚好下班以后打电话给她,突然就问道了线程的东东,那么在IOS里面线程是NSOperation—-的东东。java中Thread ,c语言也是Thread,因为OC也是C发展而来的,所以OC里面也是有线程Thread这个概念的。废话不多说贴一个最简单的Thread代码。

备注:关于线程比较经典的代码 可以参考前面的日志。这里面android的线程消息机制都设计到了 弱引用问题。非常经典 ,,,,,就是关于服务器和客户端的 ,最原生的异步请求。。

1.android中线程

1)调用线程。

mLoadDialog.show();
handler.postDelayed(run, 3000);

备注:Handler 英文操作,我这里比喻隧道,线程Runnable ,Thread,就比作车。(消息)。那么一切好理解了,隧道有操作线程的功能。也就是处理消息机制的共鞥你。

2)线程运行。

Handler handler = new Handler(); Runnable run = new Runnable() {

@Override public void run() { Intent intent = new Intent(mContext, AboutActivity.class); startActivity(intent); if (mLoadDialog != null) { mLoadDialog.dismiss(); mLoadDialog = null; }

}

};

这是一个最简单的线程例子 ,如果你看到了 可以作为参考。,

2.C语言中线程的概念

具体概念记不太清楚。但是还是记得怎么写的,以前数据结构讲到了 ,好像是有几个状态,就绪,等待,消亡 运行。不管C oc JAVA 都一样线程似乎都有这么个状态吧。。

复制,文库的代码。

/* 以生产者和消费者模型问题来阐述Linux线程的控制和通信你 生产者线程将生产的产品送入缓冲区,消费者线程则从中取出产品。 缓冲区有N个,是一个环形的缓冲池。 */ #include #include

#define BUFFER_SIZE 16

struct prodcons { int buffer[BUFFER_SIZE];/实际存放数据的数组/ pthread_mutex_t lock;/互斥体lock,用于对缓冲区的互斥操作/ int readpos,writepos; /读写指针/ pthread_cond_t notempty;/缓冲区非空的条件变量/ pthread_cond_t notfull;/缓冲区未满 的条件变量/ };

/初始化缓冲区/ void pthread_init( struct prodcons *p) { pthread_mutex_init(&p->lock,NULL); pthread_cond_init(&p->notempty,NULL); pthread_cond_init(&p->notfull,NULL); p->readpos = 0; p->writepos = 0; }

/将产品放入缓冲区,这里是存入一个整数/ void put(struct prodcons p,int data) { pthread_mutex_lock(&p->lock); /等待缓冲区未满/ if((p->writepos +1)%BUFFER_SIZE ==p->readpos) { pthread_cond_wait(&p->notfull,&p->lock); } p->buffer[p->writepos] =data; p->writepos++; if(p->writepos >= BUFFER_SIZE) p->writepos = 0; pthread_cond_signal(&p->notempty); pthread_mutex_unlock(&p->lock); } /从缓冲区取出整数/ int get(struct prodcons *p) { int data; pthread_mutex_lock(&p->lock); /等待缓冲区非空/ if(p->writepos == p->readpos) { pthread_cond_wait(&p->notempty ,&p->lock);//非空就设置条件变量notempty } /读书据,移动读指针/ data = p->buffer[p->readpos]; p->readpos++; if(p->readpos == BUFFER_SIZE) p->readpos = 0; /设置缓冲区未满的条件变量/ pthread_cond_signal(&p->notfull); pthread_mutex_unlock(&p->lock); return data; } /测试:生产站线程将1 到1000的整数送入缓冲区,消费者线程从缓冲区中获取整数,两者都打印信息/ #define OVER (-1) struct prodcons buffer; void *producer(void *data) { int n; for( n=0;n<1000;n++) { printf(“%d ——>\n”,n); put(&buffer,n); } put(&buffer,OVER); return NULL; } void *consumer(void *data) { int d; while(1) { d = get(&buffer); if(d == OVER) break; else printf(“—–>%d\n”,d); } return NULL; } int main() { pthread_t th_p,th_c; void *retval; pthread_init(&buffer); pthread_create(&th_p,NULL,producer,0); pthread_create(&th_c,NULL,consumer,0); /等待两个线程结束*/ pthread_join(th_p, &retval); pthread_join(th_c,&retval); return 0; }

3.OC的线程 。。这个现在不太了解,等着她来写吧。