静态函数之多线程

静态成员变量可以再非静态成员函数中使用,Bjarne Stroustrup为什么再创建C++的时候要创建一种静态成员函数呢?

C++产生年份:

1982年,美国AT&T公司贝尔实验室的Bjarne Stroustrup博士在c语言的基础上引入并扩充了面向对象的概念,发明了—种新的程序语言。为了表达该语言与c语言的渊源关系,它被命名为C++。而Bjarne Stroustrup(本贾尼·斯特劳斯特卢普)博士被尊称为C++语言之父。

C++出现时,还没有多线程的概念,所以不是为了多线程,那又是什么原因呢?要用到静态成员函数?为了对称。博士是学数学的,数据讲究对称,估计只是为了对称,没有什么更深层次的意义,但是后来多线程的出现,意外的让该功能有了用武之地,可以保持C++的面向对象的特性,而使用全局函数,则没有了面向对象的意味(个人理解)。

下面写一个多线程的例子:


#include <stdio.h>
#include <pthread.h>
#include <unistd.h>


int thread1 = 1;
int thread2 = 2;


class NCThread
{
pthread_t Tid;
public:
void run()
{
   printf("run start\n");
   static int count = 1;
       while(count < 10){
                sleep(1);
                printf("---------->>>thread number = %d, process id is %d, thread id is %lu\n",thread1, getpid(), pthread_self());
                count++;
       }
   printf("run end");
}


bool startThread()
{
   printf("startThread start\n");
       int ret = pthread_create(&Tid, NULL, Create, this);
   if (ret != 0) {
   printf("ERROR\n");
   return false;
   }
   printf("startThread end\n");
return true;
}


static void* Create(void* arg);
};


void* NCThread::Create(void* arg)
{
    printf("Create start\n");


    if (NULL ! = arg) {
        ((NCThread*)arg)->run();
    }

    printf("Create end\n");
    
return NULL;
}

int main()
{
printf("main start\n");
NCThread thread1;
thread1.startThread();

static int maincount = 1;
while(maincount < 7) {
   printf("---------->>>thread number = %d, process id is %d, thread id is %lu\n",thread2, getpid(), pthread_self());
   sleep(2);
   maincount++;
}
printf("main end\n");
return 0;

 

}

 

 

直接再ubuntu14.04上面可以跑起来,跑起来就知道啥意思了.

g++ ncthread.cpp -lpthread

./a.out

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值