Android 线程的C++封装,使用

来源:互联网 发布:韩国淘宝网站 编辑:程序博客网 时间:2024/06/06 06:34
前段时间使用Android对线程的C++封装时出了一点小问题,简单总结一下。


希望能帮助大家避免和我犯一样的错误~~




Android对Thread的C++封装,见源码/frameworks/base/include/utils/threads.h


如何封装,点击链接 http://blog.csdn.net/yili_xie/article/details/4803517


因为是原创的吗,所以,不能盗取别人的成果,大家看完再回来看这里,看这里。。。。




重温一下重点:


virtual bool        threadLoop() = 0;
这个函数是每个线程类都要实现的,在这里定义thread的执行内容,这个函数如果返回true,则函数会不停地执行threadloop中的内容,如果这个函数返回false,则threadloop中的内容仅仅执行一次线程就会退出。




我的问题出在哪里了呢???


问题出在 threadLoop() 里。。。按上面讲的“如果这个 threadLoop()返回false,则 threadLoop()中的内容仅仅执行一次线程就会退出;如果返回true,则函数会不停地执行threadLoop()中的内容”,我的问题是,当我返回true的时候,threadLoop()中的内容也华丽丽地仅仅执行一次,然后退出了


被骗了吗?不可能呀!!!


难道,难道,我人品爆发了


其实是我程序写错了。


上程序


ThreadTest.cpp


[cpp] view plaincopy
#define LOG_TAG "MyThread"  
  
#include <utils/Log.h>  
#include <utils/threads.h>  
using namespace android;  
  
class MyThread: public Thread {  
public:  
    MyThread() {  
    LOGD("MyThread");  
    };  
  
    virtual ~MyThread(){  
    LOGD("~MyThread");  
    };  
        
    //如果返回true,循环调用此函数,返回false下一次不会再调用此函数  
    bool threadLoop(){  
    LOGD("threadLoop");  
        return true;  
    };  
  
};  
  
int main(){  
  LOGD("main start");  
 <strong><span style="color:#ff0000;"> sp<MyThread> th = new MyThread();  //正确的使用方法;  
  //MyThread* th = new MyThread();   //错误的使用方法;</span></strong>  
  th->run();  
  while(1);  
  LOGD("main end");  
  return 0;  
}  


Android.mk
[cpp] view plaincopy
LOCAL_PATH := $(call my-dir)  
include $(CLEAR_VARS)  
  
LOCAL_SRC_FILES := ThreadTest.cpp  
     
LOCAL_SHARED_LIBRARIES :=libcutils \  
    libutils    
      
LOCAL_MODULE := libmonitor  
  
LOCAL_MODULE_TAGS := eng  
      
LOCAL_PRELINK_MODULE := false  
  
include $(BUILD_EXECUTABLE)  


这里的sp是什么捏


在android源码中我们可以看到很多sp<typename>的写法,这里的sp是android用来实现垃圾回收机制的智能指针。


详情请参考http://blog.163.com/bluesky_07_06_1/blog/static/1644400832010513944748/




总结:在上面我们用来测试的Demo程序中有两个注意点,


1.主线程要活着,所以这里用了while(1);


2.不要忘记sp, 定义线程sp<threadname> thread;




把我怎么错的写了一遍,大家引以为戒~~~
0 0
原创粉丝点击