某源码thread,socket研究5

这只是一个线程池的框架还有许多不足 : 没有实现server->client数据发送 , 还有许多细节没有完善。


Lock.cpp : 锁的操作 , 读锁可以并发 , 写锁独占.

Queue.h : 队列的封装 , 队列的读和写都加了锁的保护.

Socket.cpp : 套接口的简单封装.

Thread.cpp : 线程的封装实现了些简单的线程停止,运行等功能 , 启动别的线程的时候需要继承次类.

Worker.cpp : 用户接口类 , 用户需继承此类。

ListenThread.cpp(继承Thread.cpp) : 服务器监听线程.如果有客户端连接通知ThreadPool类,由ThreadPool类进行任务分派.

TaskThread.cpp(继承Thread.cpp) : 具体任务类,负责接受客户端发送数据.

ThreadPool.cpp (继承Thread.cpp) : 线程池类负责启动别的线程 , 并且进行线程调度。首先启动ListenThread.cpp类,如果有客户端

连接ListenThread.cpp类发送信号通知ThreadPool.cpp类,收到信号再分配给TaskThread.cpp类,进行处理。如果没有空闲任务类,动态再

创建一定数目的任务类。


#ifndef __USERWORKER__
#define __USERWORKER__
#include "Worker.h"
#include "Log.h"
#include "def.h"
#include "Server.h"
struct UserData
{
    int age;
    char name[20];
};
class UserWorker : public G_Worker
{
    public:
        UserWorker(unsigned int num) : G_Worker(num)
        {
        }
        ~UserWorker()
        {
        }
        void recvMessage(void *str , int nSocket)
        {
    //      struct UserData *userData = (struct UserData*)str;
    //      std::cout<<"userData->age = "<<userData->age<<std::endl;
            sendMessage(nSocket , str);
            //sleep(2);
        }
};
class MainPro  : public G_Server
{
    public:
        MainPro()
        {
    //      userWork = new UserWorker(3);
    //  userWork->Bind(9999);
        }
        ~MainPro()
        {
        /*
            if(userWork)
            {
                delete userWork;
                userWork = NULL;
            }
            */
        }
                                        
        static MainPro *getInstance()
        {
            if(!instance)
            {
                instance = new MainPro();
            }
            return instance;
        }
        void delInstance()
        {
            if(instance)
            {
                delete instance;
                instance = NULL;
            }
        }
        bool init();
                                        
    private:
        UserWorker *userWork;
        static MainPro *instance;
                                        
};
#endif



#include "testPool.h"
MainPro *MainPro::instance = NULL;
bool MainPro::init()
{
    G_Server::init();
}
int main()
{
    MainPro *mp = MainPro::getInstance();
    mp->init(); //看了一遍,整个结构,没感觉出来清晰的感觉。。
    sleep(-1);
    //mp->delInstance();
    //delete mp;
    //mp = NULL;
    //mp.init();
}


#ifndef __LOG__
#define __LOG__
#include "def.h"
void debug_output(const char *fmt , ...);
#endif
#include "Log.h"
void debug_output(const char *fmt , ...)
{
/*
    time_t ti;
    ti = time(NULL);
    char times[65535];
    snprintf(times , sizeof(times) , "%s" , ctime(&ti));
    times[strlen(times)-1] = ' ';
    strncat(times , "-----------    " , 9);
    */
    va_list ap;
    char buff[65535];
    va_start(ap , fmt);
    vsnprintf(buff , sizeof(buff) ,  fmt , ap);
    std::cout<<buff;
    //strncat(times , buff , strlen(buff));
    //fwrite(times , sizeof(char) , strlen(times) , pt);
    //fwrite("\n" , 1 , 1 , pt);
    //fflush(pt);
    va_end(ap);
}

log也没写到文件里等,半成品。。。

总结,没啥优点,这个模型,感觉不是很好。。。

你可能感兴趣的:(thread,源码,socket研究)