📄 thread_lists.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 + -