静态成员变量可以再非静态成员函数中使用,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