RM520LFrm520lf.blog.chinaunix.net
sohu2000000
全部博文(414)
Alcatel_Lucent(4)
English(8)
Ericsson(2)
公司(2)
休闲生活(6)
RedHat(3)
Asiainfo(5)
PC(1)
游戏(2)
《圈子圈套》(2)
休闲娱乐(0)
读书(0)
Solaris(8)
linux(25)
Tools(0)
C++(72)
C/C++(1)
IDE(1)
AUTOMAKE AUTOCON(2)
CORBA(4)
持久连接技术(3)
硬件技术(1)
SQL(3)
Html(6)
D语言(2)
Ajax(0)
JavaScript(0)
WebDevelopment(0)
Perl(34)
JAVA(52)
PHP(1)
MySQL(10)
数据库(0)
设计模式(7)
shell 脚本(6)
脚本程序(0)
LINUX/UNIX C ?程(74)
TD_CDMA(6)
web(1)
Wavecom(0)
2011年(1)
2010年(29)
2009年(82)
2008年(301)
2007年(1)
daodanto
小雅贝贝
gaoyuyih
风之幻想
lenky040
ly_cyz
peidrigh
xidian20
cugb_cat
木人31
cynthia
Bsolar
gengyong
upup1983
taoliu12
rinejaky
white_ch
文峰聊书
分类: C/C++
2010-07-09 23:21:42
/* ****************************************************************************** * * BThread :: ThreadFunction * ****************************************************************************** */ void * BaseThread :: ThreadFunction( void * pData ) { // 保存该线程引涉指针存储到特定的线程数据对象中 if ( s_ThreadKey != 0x10000l) pthread_setspecific( s_ThreadKey, pData ); // pData的值是一个指针,该指针引涉到该线程示例对象本身 BThread * pself = (BThread *)pData; pself->ThreadMethod(); // 如果线程数据对象无效,那么从线程数据对象中删除上面的引涉指针,使用NULL来代替pData的方法达到目的 if ( s_ThreadKey != INVALID_PTHREAD_KEY ) pthread_setspecific( s_ThreadKey, NULL ); // 线程退出标志符,首先设定为false pself->m_bRunningFlag = false; return NULL; } /* ****************************************************************************** * * BThread :: Run * ****************************************************************************** */ int BThread :: Run( void ) { pthread_attr_t thread_attr; int Result; // 我们队每个线程的启动都调用Run()方法 assert( !m_bRunningFlag ); if ( m_bRunningFlag ) return 0; // 初始化线程的属性,使用pthread_attr_init方法 Result = pthread_attr_init( &thread_attr ); if ( Result != 0 ) { m_LastError = errno; return 202; } // 设定线程分离态(detached): 使用pthread_attr_setdetachstate方法 if ( m_bDetached ) { Result = pthread_attr_setdetachstate( &thread_attr, PTHREAD_CREATE_DETACHED ); if ( Result != 0 ) { m_LastError = errno; return 202; } } // 设定线程池(栈)的大小: 使用pthread_attr_setstacksize方法 size_t m_StackSize = m_StackSize>0 ? m_StackSize:1024*1024; if ( m_StackSize > 0 ) { Result = pthread_attr_setstacksize( &thread_attr, m_StackSize ); if ( Result != 0 ) { m_LastError = errno; return 202; } } // 生成欲求的线程,使用pthread_create方法 Result = pthread_create( &m_ThreadID, &thread_attr, &ThreadFunction, this ); if ( Result != 0 ) { m_LastError = errno; return 202; } //清楚中间数据-pthread_attr_t : 使用pthread_attr_destroy方法 pthread_attr_destroy( &thread_attr ); m_bJoinable = true; m_bRunningFlag = true; return 0; }
上一篇:C++ Qt , Rectange Confict Intersect Arer Problem
下一篇:回调函数
登录 注册