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

📄 perthread.h

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 H
字号:
/* perthread.h: Header file for cygwin synchronization primitives.   Copyright 2000, 2001 Red Hat, Inc.   Written by Christopher Faylor <cgf@cygnus.com>This file is part of Cygwin.This software is a copyrighted work licensed under the terms of theCygwin license.  Please consult the file "CYGWIN_LICENSE" fordetails. */#define PTMAGIC 0x77366377struct _reent;extern struct _reent reent_data;#define PER_THREAD_FORK_CLEAR ((void *)0xffffffff)class per_thread{  DWORD tls;  int clear_on_fork_p;public:  per_thread (int forkval = 1) {tls = TlsAlloc (); clear_on_fork_p = forkval;}  DWORD get_tls () {return tls;}  int clear_on_fork () {return clear_on_fork_p;}  virtual void *get () {return TlsGetValue (get_tls ());}  virtual size_t size () {return 0;}  virtual void set (void *s = NULL);  virtual void set (int n) {TlsSetValue (get_tls (), (void *)n);}  virtual void *create ()  {    void *s = new char [size ()];    memset (s, 0, size ());    set (s);    return s;  }};class per_thread_waitq : public per_thread{public:  per_thread_waitq () : per_thread (0) {}  void *get () {return (waitq *) this->per_thread::get ();}  void *create () {return (waitq *) this->per_thread::create ();}  size_t size () {return sizeof (waitq);}};#if defined (NEED_VFORK)class vfork_save{  jmp_buf j;  int exitval; public:  int pid;  DWORD frame[100];  char **vfork_ebp;  char **vfork_esp;  int ctty;  pid_t sid;  pid_t pgid;  int is_active () { return pid < 0; }  void restore_pid (int val)  {    pid = val;    longjmp (j, 1);  }  void restore_exit (int val)  {    exitval = val;    longjmp (j, 1);  }  friend int vfork ();};class per_thread_vfork : public per_thread{public:  vfork_save *val () { return (vfork_save *) this->per_thread::get (); }  vfork_save *create () {return (vfork_save *) this->per_thread::create ();}  size_t size () {return sizeof (vfork_save);}};extern per_thread_vfork vfork_storage;extern vfork_save *main_vfork;#endifextern "C" {struct signal_dispatch{  int arg;  void (*func) (int);  int sig;  int saved_errno;  int sa_flags;  DWORD oldmask;  DWORD newmask;  DWORD retaddr;  DWORD *retaddr_on_stack;};};struct per_thread_signal_dispatch : public per_thread{  signal_dispatch *get () { return (signal_dispatch *) this->per_thread::get (); }  signal_dispatch *create () {return (signal_dispatch *) this->per_thread::create ();}  size_t size () {return sizeof (signal_dispatch);}};extern per_thread_waitq waitq_storage;extern per_thread_signal_dispatch signal_dispatch_storage;extern per_thread *threadstuff[];

⌨️ 快捷键说明

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