⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread_lists.c

📁 C++ SOCKET 类
💻 C
字号:
#include "thread.h"#include "thread_lists.h"#include <threads/signal_num.h>#include <threads/exception.h>#include <csignal>#include <cerrno>#define MAGIC_INIT_NO    0x2121961namespace cpp_threads {  class ThreadElement : public Node {  private:    Pthread* _ptr;  public:    ThreadElement(Pthread *p)     {       _ptr = p;      if( _ptr == 0 )	exception::fatal( EFAULT );    };    ~ThreadElement() { };        Pthread *getPtr()     {       return _ptr;     };    int id()    {      return _ptr->id();    }    int ppid()    {      return _ptr->ppid();    }  };  ThreadList::ThreadList()  {    Node::setHeader();    _inited = MAGIC_INIT_NO;  }  ThreadList::~ThreadList()  {  }  bool  ThreadList::inited()  {    return (_inited == MAGIC_INIT_NO);  }  Node *  ThreadList::locate(int id)  {    Node *i;    for(i=getStart();i;i=i->getNext())      if (((ThreadElement*)i)->id() == id)	break;    return i;  }  void ThreadList::remove(int id)  {    Node* i = locate(id);    if ( i )      delete i;  }  void ThreadList::remove(Pthread *thr_p)  {    Node* i;    for( i=getStart();i;i=i->getNext() )      if( ((ThreadElement*)i)->getPtr() == thr_p )	break;    if( i )      delete i;  }  void ThreadList::restart(int id)  {    kill(id, CPPTHREAD_SIG_RESTART );  }  void ThreadList::suspend(int id)  {    Node* i;    i = locate(id);    if ( i )      ((ThreadElement*)i)->getPtr()->stop();  }  void ThreadList::pushBack(Pthread *thr_p)  {    Node* i = getEnd();    if( i == 0 )      i = this;    i->AddAfter(new ThreadElement(thr_p));  }  Pthread *ThreadList::nextChild(Pthread *child_p)  {    Node *i,*start;    if( child_p != 0 && (start = locate(child_p->id())) )      for( i=start->getNext();i;i=i->getNext() )	if( ((ThreadElement*)i)->ppid() == child_p->id() )	  return ((ThreadElement*)i)->getPtr();    return 0;  }  Pthread *ThreadList::child(int ppid_p)  {    Node* i;    for(i=getStart();i;i=i->getNext())      if( ((ThreadElement*)i)->ppid() == ppid_p )	return ((ThreadElement*)i)->getPtr();    return 0;  }  Pthread *ThreadList::ptr(int pid_p)  {    Node* i = 0;    if( inited() )      i = locate(pid_p);    return (i?((ThreadElement*)i)->getPtr():0);  }  Pthread *ThreadList::self()  {    return ptr(getpid());  }}; // Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -