亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctask.h

?? c-smile 一個語法類似與JS 又有點像C++的 編譯器
?? H
字號:
//-< CTASK.H >-------------------------------------------------------*--------*
// SAL                       Version 1.0         (c) 1997  GARRET    *     ?  *
// (System Abstraction Layer)                                        *   /\|  *
//                                                                   *  /  \  *
//                          Created:      7-Jan-97    K.A. Knizhnik  * / [] \ *
//                          Last update: 21-Nov-98    K.A. Knizhnik  * GARRET *
//-------------------------------------------------------------------*--------*
// Cooperative multitasking impelmentation (portable version)
//-------------------------------------------------------------------*--------*

#ifndef __CTASK_H__
#define __CTASK_H__

#include "support.h"

#define COOPERATIVE_MULTITASKING 1

#include <setjmp.h>

namespace sal
{

class task;
class mutex;
class semaphore;
class mutex_internals;

class task_queue { 
    friend class task;
    friend class task_internals;
  protected: 
    task_internals* queue;

  public:
    void    insert(task_internals* tp);  
    void    remove(task_internals* tp);

    task_internals* first();

    boolean is_empty() { return queue == NULL; }
    void    prune() { queue = NULL; }

    task_queue() { queue = NULL; }
}; 

class semaphore_internals { 
  protected: 
    friend class task;
    friend class task_internals;

    task_queue wait_queue; 
    int        count;

    void wait(); 
    boolean wait_with_timeout(timeout_t msec); 
    void signal(); 
    void broadcast(); 

    semaphore_internals(int init_count) { count = init_count; }
};

class event_internals : public semaphore_internals { 
  protected: 
    friend class task;
    friend class task_internals;

    void wait(); 
    boolean wait_with_timeout(timeout_t msec); 
    void signal();
    void reset() { count = 0; }

    event_internals(boolean signaled) : semaphore_internals(signaled) {}
};

class mutex_internals : public semaphore_internals {
  protected: 
    friend class semaphorex_internals;
    friend class eventex_internals;
    friend class task_internals;

    task_internals*  owner;     // owner of mutex (NULL if none)
    mutex_internals* next_hold; // list of mutexes owned by task
    int              nest;      // nested access counter

    void release(); // release mutex hold by terminated task
    void enter(); 
    void leave(); 


    mutex_internals() : semaphore_internals(0) { 
	owner = NULL; 
	nest = 0;
    }
};

class semaphorex_internals : public semaphore_internals { 
  protected: 
    mutex_internals& cs;
    
    void wait() { 
	if (count > 0) { 
	    count -= 1;
	} else { 
	    cs.nest -= 1;
	    assert(cs.nest == 0);
	    cs.release();
	    semaphore_internals::wait();
	    cs.enter();
	}
    }
    boolean wait_with_timeout(timeout_t msec) { 
	if (count > 0) { 
	    count -= 1;
	    return True;
	} else { 
	    cs.nest -= 1;
	    assert(cs.nest == 0);
	    cs.release();
	    boolean result = semaphore_internals::wait_with_timeout(msec);
	    cs.enter();
	    return result;
	}	
    }
    semaphorex_internals(mutex_internals& guard, int init_count) 
    : semaphore_internals(init_count), cs(guard) {}
};    
	
class eventex_internals : public event_internals { 
  protected: 
    mutex_internals& cs;
    
    void wait() { 
	cs.nest -= 1;
	assert(cs.nest == 0);
	cs.release();
	event_internals::wait();
	cs.enter();
    }
    boolean wait_with_timeout(timeout_t msec) { 
	cs.nest -= 1;
	assert(cs.nest == 0);
	cs.release();
	boolean result = event_internals::wait_with_timeout(msec);
	cs.enter();
	return result;
    }	
    eventex_internals(mutex_internals& guard, boolean signaled) 
    : event_internals(signaled), cs(guard) {}
};

//
// Timer for cooperative multitasking.
// Asynchronous event manager is responsible for checking
// timeout expiration and calling 'expired' method of timer. 
// 
typedef void (*ctimer_callback_t)(void*);

class ctimer : public l2elem { 
    friend class async_event_manager;
  protected: 
    timeout_t         start;    // time of timer starting
    timeout_t         timeout;  
    void*             arg;
    ctimer_callback_t f;
    
    void expired();

  public:
    boolean timeout_expired; 
    void start_timer(ctimer_callback_t f, void* arg, timeout_t timeout); 
    void stop_timer() { unlink(); }
    void reset() { prune(); }
}; 

#define task_proc // qualifier for task start procedure

//
// Functions to support task debuuging. To see state of the tasks
// set breakpoint to function debug_catch_task_activation and
// then execute in debugger function debug_select_task(i), where
// 'i' is task number. This function restores context of specified task and 
// then function debug_catch_task_activation is called. 
// Total number of tasks in process (active or sleeping)
// can be obtained by function debug_get_number_of_tasks(). 
// Task number 'i' should be positive number less than value returned by
// debug_get_number_of_tasks(). It is possible to call function
// debug_select_task(i) several times. But it is impossible 
// to restore state of current task (task which was running when debugger
// stop the program), because it's context was not saved. 
// So it is impossible to continue execution of program after
// debug_select_task(i) was called. 
//
extern "C" int  debug_get_number_of_tasks();
extern "C" int  debug_select_task(int i);
extern "C" void debug_catch_task_activation(); 


class task_internals { 
    friend class task;
    friend class task_queue;
    friend class semaphore_internals;
    friend class event_internals;
    friend class mutex_internals;

    friend int debug_get_number_of_tasks();
    friend int debug_select_task(int i);

  protected: 
    unsigned        lomem_guard;   // special field for checking stack overflow
    
    task_internals* next_block;    // next free block
    boolean         used;          // used or free frames
    size_t          size;          // size of frame

    task_internals* chain;         // next task in running or waiting queue
    int             pri;           // priority of task

    void (task_proc *f)(void*);    // pointer to task function 
    jmp_buf         ctx;           // saved context of task
    jmp_buf         exit_ctx;      // used to perform task termination
    size_t          stack_size;    // size of stack used by task <= size
    void*           arg;           // argumrnt to task function
     
    mutex_internals* hold_mutexes; // list of mutexes which are hold by task

    semaphore_internals* wait_sem; // semaphore for which task is waiting

    ctimer          tmr;           // timer for waiting semaphore with timeout 
    boolean         timeout_expired; // task is wakeuped from sleeping at 
                                     // semaphore due to timeout expiration

    enum task_state {
	tsk_run,                  // task is executed now
	tsk_ready,                // task is ready to run (in ready_queue)
	tsk_wait,                 // task waiting for resource
	tsk_zombie                // killed task
    };  
    task_state      state;         // current satte of task

    unsigned        himem_guard;   // special field for checking stack overflow 

    static task_queue ready_queue; // queue of ready to run tasks
    static task_internals* curr;   // running task
    static task_internals  main;   // main task (created by intialize function)

    static jmp_buf  creator_ctx;   // context of task creating new task

    static void task_proc select_loop(void*);

    void switch_context(); // save context of current task and activate
                           // and schedule task with the highest priority 
                           // for running

    void allocate(size_t requested_stack_size); 

    //
    // Wait until semaphore will be signaled
    //
    void wait(semaphore_internals* sem);
    //
    // Wait until semaphore will be signaled or timeout will be expired.
    // Returns True in first case and False in second (timeout expiration).
    //
    boolean wait(semaphore_internals* sem, timeout_t msec);

    void wakeup(); // wakeup sleeping task due to timeout expiration
    static void timeout_expired_callback(void* tmr);

    void signal(); // switch sleeping at semaphore task to ready state 
                   // because semaphore is signaled

    void kill();
};

};

#endif




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99久久久久| 日韩欧美在线一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 久久精品夜夜夜夜久久| 亚洲网友自拍偷拍| 99国产精品国产精品久久| 欧美久久久影院| 亚洲精品中文在线影院| 成人免费看视频| 久久天天做天天爱综合色| 日本成人在线视频网站| 欧洲国产伦久久久久久久| 国产精品丝袜在线| 国产精品99久久久久久久vr| 日韩一区二区三区电影| 调教+趴+乳夹+国产+精品| 日本丶国产丶欧美色综合| 五月婷婷另类国产| 91丨九色丨蝌蚪富婆spa| 国产欧美一区二区在线| 久久电影网电视剧免费观看| 欧美吞精做爰啪啪高潮| 日韩一区在线播放| 成人av网站大全| 国产精品久线观看视频| 国产成人自拍网| 欧美国产一区在线| 成人av动漫在线| 亚洲国产高清在线| 成人理论电影网| 国产精品成人午夜| 色噜噜狠狠色综合欧洲selulu| 中文字幕一区二区在线播放| 99久久综合99久久综合网站| 中文字幕一区三区| 色综合天天性综合| 一级日本不卡的影视| 精品视频一区 二区 三区| 亚洲小说春色综合另类电影| 欧美乱妇15p| 久久超碰97中文字幕| 国产性天天综合网| 99精品视频中文字幕| 一区二区三区在线免费观看| 欧美午夜电影网| 免费视频一区二区| 日本一区二区三区在线不卡| 福利一区二区在线| 亚洲女与黑人做爰| 在线播放中文一区| 国产美女一区二区三区| 亚洲天堂2016| 91麻豆精品91久久久久久清纯| 精品无码三级在线观看视频| 久久伊人蜜桃av一区二区| 成人精品亚洲人成在线| 一区二区免费视频| 日韩视频一区二区在线观看| 国产高清不卡一区二区| 亚洲精品一卡二卡| 欧美成人三级在线| 色偷偷久久一区二区三区| 免费在线观看精品| 国产精品传媒视频| 日韩欧美一区二区在线视频| 国产成人av电影免费在线观看| 亚洲一区日韩精品中文字幕| 精品国产乱子伦一区| 色综合久久天天综合网| 美女精品自拍一二三四| 日韩毛片在线免费观看| 欧美电影免费提供在线观看| 成人精品一区二区三区中文字幕| 亚洲成人动漫在线免费观看| 日本一区二区三区四区在线视频| 欧美日韩久久不卡| 国产不卡视频在线观看| 视频在线观看一区| 中文字幕在线观看一区| 久久这里只有精品视频网| 欧美色图激情小说| jiyouzz国产精品久久| 麻豆精品一区二区综合av| 亚洲乱码国产乱码精品精98午夜 | 91免费版在线看| 激情综合色综合久久| 一区二区三区免费在线观看| 欧美国产综合色视频| 欧美成人精品高清在线播放| 色婷婷精品久久二区二区蜜臀av| 国产高清不卡二三区| 美女一区二区久久| 亚洲va国产va欧美va观看| 中文字幕一区不卡| 国产人妖乱国产精品人妖| 欧美一级国产精品| 欧美日本韩国一区二区三区视频 | 欧美一二三区精品| 欧美色综合天天久久综合精品| 成人性生交大片免费看视频在线 | 日本亚洲免费观看| 久久综合久久综合九色| 欧美精品丝袜中出| 在线观看网站黄不卡| fc2成人免费人成在线观看播放| 韩国女主播一区二区三区| 日本欧美一区二区在线观看| 亚洲综合色区另类av| 一区二区三区四区av| 国产精品人妖ts系列视频| 中文字幕av资源一区| 国产精品久久久久久久久动漫 | 不卡一区二区中文字幕| 精品一区二区免费| 韩国三级在线一区| 国产精品18久久久久久vr| 国产精品一区二区久久精品爱涩 | 欧美疯狂性受xxxxx喷水图片| 91麻豆自制传媒国产之光| 91麻豆精品一区二区三区| 91在线国产福利| 色一区在线观看| 91国产免费观看| 欧美日韩黄色影视| 日韩欧美高清一区| 精品国产不卡一区二区三区| 国产亚洲综合在线| 国产精品久久久久久久久果冻传媒| 国产精品传媒入口麻豆| 亚洲自拍偷拍麻豆| 美女脱光内衣内裤视频久久网站 | 激情国产一区二区| 丁香婷婷综合五月| 日本高清不卡一区| 欧美精品粉嫩高潮一区二区| 久久综合色婷婷| 国产精品国模大尺度视频| 亚洲国产综合在线| 麻豆免费精品视频| 国产成人精品亚洲日本在线桃色 | 成人高清视频在线观看| 不卡av免费在线观看| 欧美在线色视频| 精品国产乱码久久久久久图片| 国产欧美精品一区二区色综合| 亚洲婷婷国产精品电影人久久| 日日夜夜精品视频免费| 国内久久婷婷综合| 日本久久精品电影| 欧美一级高清片| 亚洲少妇中出一区| eeuss影院一区二区三区| 欧美一区二区三区在线电影| 欧美一区二区三区不卡| 国产人伦精品一区二区| 一区二区三区日韩在线观看| 免费观看日韩av| av午夜精品一区二区三区| 在线不卡中文字幕| 国产精品不卡在线观看| 奇米精品一区二区三区在线观看一| 国产a级毛片一区| 欧美三级午夜理伦三级中视频| 久久色.com| 日韩激情一区二区| 色综合久久综合网欧美综合网| 亚洲精品在线观| 亚洲va国产va欧美va观看| 99精品国产一区二区三区不卡| 欧美一区二区三区精品| 亚洲最新在线观看| 床上的激情91.| 精品久久一二三区| 天天色 色综合| 色综合久久中文字幕综合网| 久久精品人人做人人综合| 亚洲成人精品一区| 在线亚洲一区二区| 欧美视频在线一区| 欧美午夜精品免费| 中文天堂在线一区| 国产一区二区成人久久免费影院| 在线观看日韩高清av| 综合网在线视频| 成人精品国产免费网站| 久久免费看少妇高潮| 久久99热99| 日韩欧美成人一区| 麻豆成人在线观看| 91精品国产综合久久小美女| 亚洲va欧美va天堂v国产综合| 在线观看三级视频欧美| 亚洲欧美色综合| 日本精品裸体写真集在线观看| 国产精品国产馆在线真实露脸| 国产精品1区2区3区| 中文字幕免费一区| 成人网在线免费视频| 国产精品你懂的在线欣赏| 国产**成人网毛片九色|