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

📄 event.c

📁 cfront是最开始c++语言到C语言的转换工具
💻 C
字号:
/*ident	"@(#)cls4:lib/task/task/event.c	1.1" *//**************************************************************************			Copyright (c) 1984 AT&T	  		  All Rights Reserved  		THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T		The copyright notice above does not evidence any   		actual or intended publication of such source code.*****************************************************************************/#include <task.h>const	NASS = NSIG;static Interrupt_handler*	hnd[NASS];	// hnd[i] is used for signal istatic SIG_PF	old_handlers[NASS];Interrupt_alerter::Interrupt_alerter(): task("Interrupt_alerter"){	for(;;) {		sleep();		for (register Interrupt_handler** p = &hnd[0]; p < &hnd[NASS]; p++)			if (*p && (*p)->got_interrupt) {				(*p)->alert();			}	}}/* Note:  the type of this function must match the definition of SIG_FUNC_TYP   in signal.h. */voidsigFunc(int sigNo){	if ((unsigned)sigNo >= (unsigned)NASS)		object::task_error(E_BADSIG, (object*)0);	Interrupt_handler*	as = hnd[sigNo];	if (as == 0)		object::task_error(E_NO_HNDLR, (object*)0);	as->interrupt();	as->got_interrupt = 1;	sched::priority_sched = &interrupt_alerter;	signal(sigNo, sigFunc);		//reset					//MORE:  ifdef SVR3 use sigset}Interrupt_handler::Interrupt_handler(int vecid): id(vecid), got_interrupt(0){	if ((unsigned)id >= (unsigned)NASS)		task_error(E_BADSIG, this);	if((old = hnd[id]) == 0)		old_handlers[id] = signal(id, sigFunc);	else		if (old->got_interrupt) {			old->alert();		}	hnd[id] = this;	this_task()->keep_waiting();}Interrupt_handler::~Interrupt_handler(){	this_task()->dont_wait();	for(register Interrupt_handler** as = &hnd[id];; as = &(*as)->old) {		if (*as == this) break;		if (*as == 0)			task_error(E_LOSTHNDLR, this);	}	if ((*as = old) == 0)		 signal(id, old_handlers[id]);}voidInterrupt_handler::interrupt(){}intInterrupt_handler::pending(){	if (!got_interrupt)		return 1;	got_interrupt = 0;	return 0;}

⌨️ 快捷键说明

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