Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/local_includes/cygthread.h')
-rw-r--r--winsup/cygwin/local_includes/cygthread.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/winsup/cygwin/local_includes/cygthread.h b/winsup/cygwin/local_includes/cygthread.h
new file mode 100644
index 000000000..241180f2b
--- /dev/null
+++ b/winsup/cygwin/local_includes/cygthread.h
@@ -0,0 +1,83 @@
+/* cygthread.h
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _CYGTHREAD_H
+#define _CYGTHREAD_H
+
+typedef void (*LPVOID_THREAD_START_ROUTINE) (void *) __attribute__((noreturn)); // Input queue thread
+
+class cygthread
+{
+ LONG inuse;
+ DWORD id;
+ HANDLE h;
+ HANDLE ev;
+ HANDLE thread_sync;
+ void *stack_ptr;
+ const char *__name;
+#ifdef DEBUGGING
+ const char *__oldname;
+ bool terminated;
+#endif
+ LPTHREAD_START_ROUTINE func;
+ unsigned arglen;
+ VOID *arg;
+ bool is_freerange;
+ static bool exiting;
+ HANDLE notify_detached;
+ void create ();
+ static void CALLBACK async_create (ULONG_PTR);
+ public:
+ bool terminate_thread ();
+ static DWORD stub (VOID *);
+ static DWORD simplestub (VOID *);
+ static DWORD main_thread_id;
+ static const char *name (DWORD = 0);
+ void callfunc (bool) __attribute__ ((noinline, ));
+ void auto_release () {func = NULL;}
+ void release (bool);
+ cygthread (LPTHREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name, HANDLE notify = NULL)
+ : __name (name), func (start), arglen (n), arg (param),
+ notify_detached (notify)
+ {
+ create ();
+ }
+ cygthread (LPVOID_THREAD_START_ROUTINE start, LPVOID param, const char *name)
+ : __name (name), func ((LPTHREAD_START_ROUTINE) start), arglen (0),
+ arg (param), notify_detached (NULL)
+ {
+ QueueUserAPC (async_create, GetCurrentThread (), (ULONG_PTR) this);
+ }
+ cygthread (LPTHREAD_START_ROUTINE start, LPVOID param, const char *name, HANDLE notify = NULL)
+ : __name (name), func (start), arglen (0), arg (param),
+ notify_detached (notify)
+ {
+ create ();
+ }
+ cygthread (LPVOID_THREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name)
+ : __name (name), func ((LPTHREAD_START_ROUTINE) start), arglen (n),
+ arg (param), notify_detached (NULL)
+ {
+ QueueUserAPC (async_create, GetCurrentThread (), (ULONG_PTR) this);
+ }
+ cygthread () {};
+ static void init ();
+ bool detach (HANDLE = NULL);
+ operator HANDLE ();
+ void * operator new (size_t);
+ static cygthread *freerange ();
+ static void terminate ();
+ HANDLE thread_handle () const {return h;}
+ bool SetThreadPriority (int nPriority) {return ::SetThreadPriority (h, nPriority);}
+ void zap_h ()
+ {
+ CloseHandle (h);
+ h = NULL;
+ }
+};
+
+#define cygself NULL
+#endif /*_CYGTHREAD_H*/