📄 sigproc.h
字号:
/* sigproc.h Copyright 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.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. */#ifndef _SIGPROC_H#define _SIGPROC_H#include <signal.h>#define EXIT_SIGNAL 0x010000#define EXIT_REPARENTING 0x020000#define EXIT_NOCLOSEALL 0x040000enum procstuff{ PROC_ADDCHILD = 1, // add a new subprocess to list PROC_CHILDTERMINATED = 2, // a child died PROC_CLEARWAIT = 3, // clear all waits - signal arrived PROC_WAIT = 4, // setup for wait() for subproc PROC_NOTHING = 5 // nothing, really};typedef struct struct_waitq{ int pid; int options; int status; HANDLE ev; void *rusage; /* pointer to potential rusage */ struct struct_waitq *next; HANDLE thread_ev;} waitq;struct sigthread{ DWORD id; DWORD frame; CRITICAL_SECTION lock; LONG winapi_lock; BOOL exception; bool get_winapi_lock (int test = 0); void release_winapi_lock (); void init (const char *s);};class sigframe{private: sigthread *st; inline bool unregister () { if (!st) return 0; EnterCriticalSection (&st->lock); st->frame = 0; st->exception = 0; st->release_winapi_lock (); LeaveCriticalSection (&st->lock); st = NULL; return 1; }public: inline void set (sigthread &t, DWORD ebp, bool is_exception = 0) { DWORD oframe = t.frame; st = &t; t.frame = ebp; t.exception = is_exception; if (!oframe) t.get_winapi_lock (); } inline void init (sigthread &t, DWORD ebp = (DWORD) __builtin_frame_address (0)) { if (!t.frame && t.id == GetCurrentThreadId ()) set (t, ebp); else st = NULL; } sigframe (): st (NULL) {} sigframe (sigthread &t, DWORD ebp = (DWORD) __builtin_frame_address (0)) {init (t, ebp);} ~sigframe () { unregister (); } int call_signal_handler ();};extern sigthread mainthread;extern HANDLE signal_arrived;extern HANDLE sigCONT;BOOL __stdcall my_parent_is_alive ();extern "C" int __stdcall sig_dispatch_pending (int force = FALSE);extern "C" void __stdcall set_process_mask (sigset_t newmask);extern "C" void __stdcall reset_signal_arrived ();int __stdcall sig_handle (int, bool);void __stdcall sig_clear (int);void __stdcall sig_set_pending (int);int __stdcall handle_sigsuspend (sigset_t);int __stdcall proc_subproc (DWORD, DWORD);class _pinfo;void __stdcall proc_terminate ();void __stdcall sigproc_init ();void __stdcall subproc_init ();void __stdcall sigproc_terminate ();BOOL __stdcall proc_exists (_pinfo *) __attribute__ ((regparm(1)));BOOL __stdcall pid_exists (pid_t) __attribute__ ((regparm(1)));int __stdcall sig_send (_pinfo *, int, DWORD ebp = (DWORD) __builtin_frame_address (0), bool exception = 0) __attribute__ ((regparm(3)));void __stdcall signal_fixup_after_fork ();void __stdcall signal_fixup_after_exec (bool);void __stdcall wait_for_sigthread ();extern char myself_nowait_dummy[];extern char myself_nowait_nonmain_dummy[];#define WAIT_SIG_PRIORITY THREAD_PRIORITY_TIME_CRITICAL#define myself_nowait ((_pinfo *)myself_nowait_dummy)#define myself_nowait_nonmain ((_pinfo *)myself_nowait_nonmain_dummy)#endif /*_SIGPROC_H*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -