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

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

?? ctask.doc

?? 一個多任務操作系統CTask的源代碼 用C語言編寫
?? DOC
?? 第 1 頁 / 共 5 頁
字號:
        used in applications in which malfunction of routines of this
        package would result in damage to property or health of any
        person without *very* extensive testing under all kinds of loads.
        In using CTask, you do so at your own risk. I have tested CTask
        extensively, but with a complex system like CTask, where timing
        might make a big difference, you can't be completely sure that
        all will work as intended.


                          What is required to use CTask?

        To compile CTask, Microsoft C 5.1 or later, or Turbo C 2.0 or
        later are required. Microsoft MASM 5.1 or later, or TASM 1.01 or
        later is required for the assembler parts. Conversion to other
        compilers is possible if they conform to the new ANSI standard.
        Conversion of the assembler parts to other Assembler versions
        will likely be more complicated, since it requires substitution
        of the simplified model directives by explicit segment
        definitions, and adding the DGROUP to offsets referencing data.

        Note that you can not use TASM 1.0 to assemble CTask routines.
        The first version of TASM was not fully compatible with MASM, and
        creates different code in some places, which will lead to fatal
        crashes. TASM version 1.01 does not have this problem, and can
        safely be used.
        
        
        Ctask Manual       - Version 2.2 - 90-10-12 -              Page 7


        The CTask modules have been compiled and tested with Microsoft C
        6.0 without any apparent problems (Optimization level tested was
        /Ox). Since the stability of the MSC 6.0 code generator is
        doubtful, the distributed library was compiled with MSC 5.1.

        CTask will add 14k-25k of code to your program, depending on
        options and installed drivers. The minimum static data used by
        CTask is approximately 4k. Non-DOS versions use less memory.

        Converting CTask for stand-alone operation requires few changes.
        Mainly, the timer interrupt handler (in "tsktim.asm") has to be
        rewritten, and the initialization code (in "tskmain.c") may have
        to be changed. Changes to other modules (naturally except the
        optional hardware drivers) should not be necessary. The "DOS" and
        "IBM" configuration flags in tskconf.h can be disabled to elimi-
        nate most system-dependent features of CTask.

        Another requirement is a good debugger. If you never before wrote
        multitasking applications, you're in for some surprises. The nor-
        mal debugging tools (Symdeb, Codeview) are of only limited use,
        since they use DOS calls for their I/O, and thus may conflict
        with your background tasks. One safety measure is to first thor-
        oughly test your program with preemption disabled, possibly
        inserting some schedule() calls, and only allow task preemption
        if you found most major bugs. I personally recommend Periscope
        for debugging, since it can be made resident and so is always
        available, and because it does not use DOS. Periscope IV is the
        most expensive solution, and the best tool you can imagine, but
        the less costly versions will also help a lot.


                        Do I have to pay for using CTask?

        No. One reason for writing CTask was to provide a free, no
        strings attached, utility, instead of the usual "for personal use
        only" restriction. Writing a multitasking application for
        personal use only doesn't seem too interesting to me. CTask is
        completely free, and there is no restriction on its use. You may
        incorporate all or parts of CTask in your programs, and redistri-
        bute it in source or binary form by any means. I also do not
        restrict the use of CTask in commercial applications. Since
        trying to distribute the unmodified CTask for money will only
        give you a bad name, you may even do that if you find someone
        dumb enough to buy it. Naturally, if you make a bundle from it,
        or simply like CTask, I would not reject a donation. However,
        this is not required, and it will not give you any special
        support.






        
        
        Ctask Manual       - Version 2.2 - 90-10-12 -              Page 8


                           What support can I expect?

        I will try my best to eliminate any bugs reported to me, and to
        incorporate suggested enhancements and changes. However, my spare
        time is limited, so I can not guarantee continued or individual
        support. (But since I'm one of the owners of a consulting firm,
        you can always hire me to do it...). Please address all reports
        or questions to my business address:

                Ferrari electronic GmbH
                attn: Thomas Wagner
                Ruhlsdorfer Strasse 138
                D-14513 Teltow, Germany

                Phone: (+49 3328) 474 626
                Fax:   (+49 3328) 438 04-0
                BBS:   (+49 3328) 438 04-8 (from 8/15/93)

                Internet:    twagner@bix.com
                BIX:         twagner
                Compuserve:  100023,2042

        But, please, if at all possible, do it in writing. Please do not
        phone unless it is absolutely vital (or you have a business
        proposal). I like to hear about any applications for CTask, and
        if you are visiting Berlin, I also invite you to drop by for a
        talk. But I am usually not that happy when I am interrupted in my
        paid work by a phone call requesting support for a free product.

        I will try to answer all letters and Faxes I receive. However, I
        am usually not the fastest in this respect, so please be patient.
        If you don't hear for me for a while, send me a short reminder.
        The preferred, and the fastest, method to reach me is through
        BIX, which is connected to the Internet, or through our own
        BBS, which is scheduled to be operational August 15th, 1993.

        BIX (tm) is an Information Exchange, an electronic confe-
        rencing system owned by GVC. BIX can be (and is) accessed from all
        parts of the world. Although accessing BIX from outside the US
        isn't exactly cheap (don't ask me what I have to pay each month),
        the wealth of information available there, and the fast and
        extensive help the other members can give you on all kinds of
        hard- and software problems, makes it worth every Mark, Peseta,
        Franc, or Ruble you have to spend. New versions and updates of
        CTask will first appear on BIX.

        At the time of this writing, I am one of the moderators of the
        IBM exchange on BIX, moderating the "ibm.other" conference. I
        have created a support topic for CTask, where all suggested
        enhancements and changes, plus bug reports, can be posted. Just
        join "ibm.other", topic "ctask". You can also report problems of
        limited general interest via BIXmail to "twagner". Unless I am
        not able to reach the keyboard for some reason, I log on at least
        
        
        Ctask Manual       - Version 2.2 - 90-10-12 -              Page 9


        once per day, so you can expect relatively fast responses to your
        queries.

        To get more info on joining BIX, call the BIX Customer Service at
        800-227-2983 (U.S. and Canada), or 603-924-7681 (New Hampshire
        and outside the U.S.) from 8:30 to 23:00 Eastern Time (-5 GMT).
        BIX access currently is $39 for three months (flat fee, no extra
        charges for connect time), plus the applicable telecomm charges
        (Tymnet in the U.S. and Canada, your local PTT's Packet Net
        charges from outside the U.S.). 
        International users living near a BT Tymnet node can access BIX 
        through international Tymnet at special low rates. Call the BIX 
        helpline for Tymnet access points and charges. Other international 
        users will need an account (NUI) with their local packet net. 
        Please enquire at your post/telecomm office for details.


                                About this Release

        Since the Beta release of CTask in March 1988, CTask has found
        widespread distribution through several channels. I have heard
        from some users, and their suggestions have been implemented in
        this version as far as possible.

        Special thanks go to Kent J. Quirk, Peter Heinrich, Stephen
        Worthington, Burt Bicksler, Tron Hvaring, Joe Urso, Dave Goodwin,
        Chris Blum, and Dan Heine, for their bug reports, suggestions,
        and enhancements. Bug reports and suggestions also came in from
        others, thanks to all who wrote or called. The serial code in
        TSKSIO.C was enhanced for version 2.0 by S. Worthington, and his
        ideas on debugging have been incorporated in the version 2.1
        debugging mode. Dan Heine provided valuable info on 80x87 numeric
        coprocessor support. Chris Blum wrote the integer-based
        millisecond to clock-tick conversion routine.

        Again, please notify me of your CTask application, report bugs,
        or suggest changes and enhancements. If I know you're using
        CTask, I can notify you of possible new releases and of possible
        severe bugs.









        
        
        Ctask Manual       - Version 2.2 - 90-10-12 -             Page 10


                               Multitasking Basics

                                      Tasks

        In CTask, a "task" is defined as a (far) C function. The number
        of tasks is not limited, and one function may be used for several
        tasks. There is little difference between a task function and a
        normal function. The usual form of a task function is

             void Taskfunc my_task (farptr arg)
             {
                  one-time initialization code
                  while (TRUE)
                    {
                    processing code
                    }
             }

        A task function is (usually) never called directly. Rather, it is
        specified in the call to the create_task routine, and started by
        start_task. It will then continue to run, sharing the processor
        time with all other tasks, until it is "killed" by kill_task.
        Returning from the routine will have the same effect as a kill.
        The sharing of processor time is accomplished by "preempting" the
        tasks. Preemption means that the task is interrupted in the
        middle of some statement by a hardware interrupt (usually the
        timer), and is *not* immediately restarted when the interrupt
        handler returns. Instead, the next task that is able to run is
        activated by the "scheduler", with the interrupted task
        continuing its duty at some (normally unpredictable) later time.
        You can also have multi-tasking without preemption, and CTask
        supports this, too, but this requires full cooperation of all
        tasks in the system, such that no task continues to run for an
        extended period of time without passing control to other tasks by
        an explicit scheduling request, or by waiting for an event.

        The optional argument to the task function may be used if one
        function is to be used for more than one task, for example to
        pass a pointer to a static data area for use by this specific
        instance of the function.


                                      Events

        Tasks alone would be of limited use. If you have several routines
        which just do number crunching or sorting or such, making them
        into parallel tasks would be sensible only on a multiprocessor
        system. Normally, at least some of your tasks will wait for some
        outside "event" to happen, be it the user pressing a key, or a
        character arriving from the modem. Then there may be tasks which
        have to wait until another task finishes processing on some piece
        of data before they can continue. For this synchronization, there
        are a number of constructs in CTask, which I summarize under the
        
        
        Ctask Manual       - Version 2.2 - 90-10-12 -             Page 11


        name "event". Common to all events are the operations of waiting
        for an event to happen, and signalling that the event has
        happened. Using a CTask event is much more efficient than looping
        while waiting on some shared data location to change state, and
        also eliminates concurrency problems inherent in such a simple
        approach. Tasks waiting for an event are taken off the scheduler
        queue, so they no longer use processor time.


                                    Reentrancy

        One of the biggest problem with multitasking in general, and C on
        the PC in particular, is reentrancy. Reentrancy means that you
        can use a routine, be it you own, or one of the C run-time
        library, from different tasks at the same time. When writing your
        own code, you can easily avoid problems, but when using the run-
        time library routines, you often can only guess if the routines
        are reentrant or not.

        A routine is NOT reentrant if it modifies static data. This can
        be illustrated by the following nonsense example:

             int non_reentrant (int val)
             {    static int temp;
                  temp = val;
                  return temp * 2;
             }

        Now take two tasks, which call this routine. Task1 calls it with
        val=3, Task2 with val=7. What will be the return value for both
        tasks? You never know. There are three possible outcomes:

          1) The tasks execute sequentially. Task1 will get 6, and Task2
             14 as a result. This is what one normally expects.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国模娜娜一区二区三区| 亚洲精品日日夜夜| 国产在线精品一区在线观看麻豆| 欧美一区二区在线视频| 日产国产欧美视频一区精品| 91精品久久久久久蜜臀| 美女性感视频久久| 国产婷婷色一区二区三区四区| 成人av综合在线| 亚洲影视在线观看| 日韩欧美一二三区| 国产不卡视频在线播放| 亚洲精选一二三| 欧美二区乱c少妇| 韩国三级中文字幕hd久久精品| 久久久一区二区| 94-欧美-setu| 日本不卡123| 国产女主播一区| 欧美综合一区二区三区| 麻豆一区二区在线| 久久久久99精品国产片| 欧美中文字幕一区| 韩国精品主播一区二区在线观看| 亚洲日本中文字幕区| 欧美一区二区三区日韩视频| 国产91在线观看| 亚洲一区二区三区四区在线 | 日韩亚洲欧美一区二区三区| 精品一区二区三区久久久| 国产精品区一区二区三区| 欧美视频一区二区三区四区 | 欧美日韩视频一区二区| 精品在线播放午夜| 亚洲天堂中文字幕| 精品国产一区二区三区av性色| 成人高清免费在线播放| 日本va欧美va欧美va精品| 中文字幕欧美日韩一区| 91精品国产综合久久福利软件| 从欧美一区二区三区| 天堂久久一区二区三区| 国产精品伦理一区二区| 欧美电视剧在线看免费| 91久久免费观看| 成人一二三区视频| 免费xxxx性欧美18vr| 亚洲综合成人网| 国产精品每日更新在线播放网址| 日韩手机在线导航| 欧美性大战久久久久久久蜜臀| 粉嫩在线一区二区三区视频| 青青草视频一区| 亚洲一区中文日韩| 成人欧美一区二区三区黑人麻豆| 欧美不卡一区二区三区四区| 欧美日韩情趣电影| 91黄视频在线观看| 99精品一区二区三区| 国产精品亚洲视频| 精品亚洲欧美一区| 麻豆精品视频在线观看| 丝袜美腿高跟呻吟高潮一区| 亚洲免费av高清| 中文字幕一区日韩精品欧美| 国产亚洲污的网站| 久久综合视频网| 精品国产a毛片| 日韩欧美一区中文| 日韩一二三四区| 日韩一区二区视频| 日韩一级二级三级| 日韩视频免费观看高清完整版在线观看 | 亚洲色图视频免费播放| 国产精品丝袜久久久久久app| 国产亚洲欧美日韩在线一区| 久久午夜国产精品| 久久奇米777| 国产亚洲精品免费| 国产精品色一区二区三区| 国产视频一区在线观看| 欧美激情在线免费观看| 欧美国产日韩在线观看| 国产精品免费视频观看| 中文字幕一区在线| 一区二区高清免费观看影视大全| 亚洲视频小说图片| 亚洲午夜一区二区| 天天影视涩香欲综合网| 美女网站在线免费欧美精品| 韩国av一区二区三区在线观看| 国产一区二区三区免费看| 国产一区二区在线观看视频| 国产精品77777| 成人亚洲精品久久久久软件| 波多野结衣欧美| 色婷婷av一区二区三区大白胸| 欧美午夜免费电影| 日韩欧美电影一二三| 国产日韩欧美激情| 亚洲欧洲日本在线| 天堂精品中文字幕在线| 美国欧美日韩国产在线播放| 国产成人一区在线| 色狠狠一区二区| 3d成人h动漫网站入口| 337p粉嫩大胆色噜噜噜噜亚洲| 国产欧美日韩另类一区| 一区二区三区在线视频播放| 日韩精品福利网| 国产美女主播视频一区| 成人ar影院免费观看视频| 欧美男生操女生| 国产欧美精品一区二区色综合| 亚洲三级免费电影| 美日韩一区二区| 97久久精品人人做人人爽| 欧美一卡在线观看| 国产欧美精品区一区二区三区 | 国产精品午夜久久| 亚洲国产精品一区二区久久| 国内精品国产三级国产a久久| 成人av网站在线观看| 91精品国产综合久久蜜臀 | 成人国产一区二区三区精品| 欧美日免费三级在线| 久久久久久久国产精品影院| 亚洲香肠在线观看| 国产精品一二三| 欧美日韩免费观看一区三区| 国产亚洲成av人在线观看导航| 亚洲国产视频直播| 国产成人欧美日韩在线电影| 91麻豆精品国产自产在线观看一区 | 欧美日韩一区二区三区不卡| 国产亚洲短视频| 日本不卡在线视频| 91麻豆123| 久久久蜜桃精品| 男人的天堂亚洲一区| 91污在线观看| 久久久www成人免费毛片麻豆| 日日夜夜免费精品| av在线不卡电影| 久久综合成人精品亚洲另类欧美 | 中文字幕一区二区三区精华液 | 精品福利二区三区| 日产精品久久久久久久性色| 欧美影视一区二区三区| 国产欧美一区二区精品秋霞影院| 麻豆成人av在线| 欧美日韩国产精品自在自线| 亚洲精品国产a久久久久久| 国产成人夜色高潮福利影视| 欧美电影免费观看高清完整版| 日韩专区一卡二卡| 欧美色成人综合| 一区二区三区在线影院| 成年人国产精品| 亚洲国产精品成人久久综合一区| 蜜桃一区二区三区在线| 91精品婷婷国产综合久久竹菊| 亚洲国产日韩精品| 欧美午夜理伦三级在线观看| 亚洲免费视频中文字幕| 色综合久久天天| 亚洲欧美福利一区二区| 99久久er热在这里只有精品15| 国产精品日日摸夜夜摸av| 粉嫩绯色av一区二区在线观看| 精品sm在线观看| 国产麻豆欧美日韩一区| 国产亚洲欧美日韩日本| 国产成人av电影在线播放| 国产欧美日韩三级| 成人教育av在线| 亚洲三级在线免费| 欧美视频一区二区在线观看| 婷婷久久综合九色国产成人| 777欧美精品| 黄网站免费久久| 欧美激情在线一区二区| 99久久久精品| 亚洲综合色自拍一区| 欧美二区在线观看| 激情五月激情综合网| 国产区在线观看成人精品| 成人午夜av电影| 亚洲精品第1页| 欧美久久婷婷综合色| 美女精品一区二区| 中文字幕第一区第二区| 色老汉一区二区三区| 午夜亚洲国产au精品一区二区| 欧美一区二区三区成人| 国产乱人伦偷精品视频不卡| 国产精品传媒视频| 欧美久久久久中文字幕| 狠狠色狠狠色合久久伊人| 国产精品国产三级国产aⅴ入口|