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

📄 vthread.h

📁 su 的源代码库
💻 H
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#ifndef _VTHREAD_H#define _VTHREAD_H	1#define VTHREAD_VERSION    20001201L/*	Header for the Vthread library.**	Note that the macro vt_threaded may be defined**	outside of vthread.h to suppress threading.****	Written by Kiem-Phong Vo, kpv@research.att.com*/#include	<ast_common.h>#include	<errno.h>/* ast doesn't do threads yet */#if _PACKAGE_ast && !defined(vt_threaded)#define vt_threaded     0#endif#if !defined(vt_threaded) || (defined(vt_threaded) && vt_threaded == 1)#define _may_use_threads	1#else#define _may_use_threads	0#endif#undef vt_threaded#if _may_use_threads && !defined(vt_threaded) && _hdr_pthread#define vt_threaded		1#include			<pthread.h>typedef pthread_mutex_t		_vtmtx_t;typedef pthread_once_t		_vtonce_t;typedef pthread_t		_vtself_t;typedef pthread_t		_vtid_t;typedef pthread_attr_t		_vtattr_t;#if !defined(PTHREAD_ONCE_INIT) && defined(pthread_once_init)#define PTHREAD_ONCE_INIT	pthread_once_init#endif#endif#if _may_use_threads && !defined(vt_threaded) && _WIN32#define vt_threaded		1#include			<windows.h>typedef CRITICAL_SECTION	_vtmtx_t;typedef int			_vtonce_t;typedef HANDLE			_vtself_t;typedef DWORD			_vtid_t;typedef SECURITY_ATTRIBUTES	_vtattr_t;#endif#ifndef vt_threaded#define vt_threaded		0#endif/* common attributes for various structures */#define VT_RUNNING	000000001	/* thread is running		*/#define VT_SUSPENDED	000000002	/* thread is suspended		*/#define VT_WAITED	000000004	/* thread has been waited	*/#define VT_FREE		000010000	/* object can be freed		*/#define VT_INIT		000020000	/* object was initialized	*/#define VT_BITS		000030007	/* bits that we care about	*//* directives for vtset() */#define VT_STACK	1		/* set stack size		*/typedef struct _vtmutex_s	Vtmutex_t;typedef struct _vtonce_s	Vtonce_t;typedef struct _vthread_s	Vthread_t;#ifndef EINVAL#define EINVAL			22#endif#ifndef EBUSY#define EBUSY			16#endif#ifndef EDEADLK#define EDEADLK			45#endif#ifndef EPERM#define EPERM			1#endif_BEGIN_EXTERNS_extern Vthread_t*	vtopen _ARG_((Vthread_t*, int));extern int		vtclose _ARG_((Vthread_t*));extern int		vtset _ARG_((Vthread_t*, int, Void_t*));extern int		vtrun _ARG_((Vthread_t*, void*(*)(void*), void*));extern int		vtkill _ARG_((Vthread_t*));extern int		vtwait _ARG_((Vthread_t*));extern int		vtonce _ARG_((Vtonce_t*, void(*)() ));extern Vtmutex_t*	vtmtxopen _ARG_((Vtmutex_t*, int));extern int		vtmtxclose _ARG_((Vtmutex_t*));extern int 		vtmtxlock _ARG_((Vtmutex_t*));extern int 		vtmtxtrylock _ARG_((Vtmutex_t*));extern int 		vtmtxunlock _ARG_((Vtmutex_t*));extern int 		vtmtxclrlock _ARG_((Vtmutex_t*));extern Void_t*		vtstatus _ARG_((Vthread_t*));extern int		vterror _ARG_((Vthread_t*));extern int		vtmtxerror _ARG_((Vtmutex_t*));extern int		vtonceerror _ARG_((Vtonce_t*));_END_EXTERNS_#if vt_threaded/* mutex structure */struct _vtmutex_s{	_vtmtx_t	lock;	int		count;	_vtid_t		owner;	int		state;	int		error;};/* structure for states of thread */struct _vthread_s{	_vtself_t	self;		/* self-handle		*/	_vtid_t		id;		/* thread id		*/	_vtattr_t	attrs;		/* attributes		*/	size_t		stack;		/* stack size		*/	int		state;		/* execution state	*/	int		error;		/* error status 	*/	Void_t*		exit;		/* exit value		*/};/* structure for exactly once execution */struct _vtonce_s{	int		done;	_vtonce_t	once;	int		error;};#if _WIN32#define VTONCE_INITDATA		{0, 0}#else#define VTONCE_INITDATA		{0, PTHREAD_ONCE_INIT }#endif#define vtstatus(vt)		((vt)->exit)#define vterror(vt)		((vt)->error)#define vtmtxerror(mtx)		((mtx)->error)#define vtonceerror(once)	((once)->error)#endif /*vt_threaded*//* fake structures and functions */#if !vt_threadedstruct _vtmutex_s{	int	error;};struct _vtattr_s{	int	error;};struct _vthread_s{	int	error;};struct _vtonce_s{	int	error;};typedef int		_vtmtx_t;typedef int		_vtonce_t;typedef int		_vtself_t;typedef int		_vtid_t;typedef int		_vtattr_t;#define VTONCE_INITDATA		{0}#define vtopen(vt,flgs)		((Vthread_t*)0)#define vtclose(vt)		(-1)#define vtkill(vt)		(-1)#define vtwait(vt)		(-1)#define vtrun(vt,fn,arg)	(-1)#define vtset(vt,t,v)		(-1)#define vtonce(on,fu)		(-1)#define vtmtxopen(mtx,flgs)	((Vtmutex_t*)0)#define vtmtxclose(mtx)		(-1)#define vtmtxlock(mtx)		(-1)#define vtmtxtrylock(mtx)	(-1)#define vtmtxunlock(mtx)	(-1)#define vtmtxclrlock(mtx)	(-1)#define vtstatus(vt)		((Void_t*)0)#define vterror(vt)		(0)#define vtmtxerror(mtx)		(0)#define vtonceerror(once)	(0)#endif /*!vt_threaded*/#endif /*_VTHREAD_H*/

⌨️ 快捷键说明

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