迁移源地址为:《为什么要写这个日志–献给王婷-线程》
昨天更新了一下服务器端和客户端的内容,里面涉及到了线程的概念,刚刚好下班以后打电话给她,突然就问道了线程的东东,那么在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的线程 。。这个现在不太了解,等着她来写吧。