• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            c# Threads

            1 使用多線程情況想必大家都知道拉:更好的界面交互...

            2 Advantages of Multiple Threads

            Using more than one thread, however, is the most powerful technique available to increase responsiveness to the user and process the data necessary to get the job done at almost the same time. On a computer with one processor, multiple threads can create this effect, taking advantage of the small periods of time in between user events to process the data in the background. For example, a user can edit a spreadsheet while another thread is recalculating other parts of the spreadsheet within the same application.

            Without modification, the same application would dramatically increase user satisfaction when run on a computer with more than one processor. Your single application domain could use multiple threads to accomplish the following tasks:

            • Communicate over a network, to a Web server, and to a database.

            • Perform operations that take a large amount of time.

            • Distinguish tasks of varying priority. For example, a high-priority thread manages time-critical tasks, and a low-priority thread performs other tasks.

            • Allow the user interface to remain responsive, while allocating time to background tasks.

            3 Disadvantages of Multiple Threads

            It is recommended that you use as few threads as possible, thereby minimizing the use of operating-system resources and improving performance. Threading also has resource requirements and potential conflicts to be considered when designing your application. The resource requirements are as follows:

            • The system consumes memory for the context information required by processes, AppDomain objects, and threads. Therefore, the number of processes, AppDomain objects, and threads that can be created is limited by available memory.

            • Keeping track of a large number of threads consumes significant processor time. If there are too many threads, most of them will not make significant progress. If most of the current threads are in one process, threads in other processes are scheduled less frequently.

            • Controlling code execution with many threads is complex, and can be a source of many bugs.

            • Destroying threads requires knowing what could happen and handling those issues.

            Providing shared access to resources can create conflicts. To avoid conflicts, you must synchronize, or control the access to, shared resources. Failure to synchronize access properly (in the same or different application domains) can lead to problems such as deadlocks (in which two threads stop responding while each waits for the other to complete) and race conditions (when an anomalous result occurs due to an unexpected critical dependence on the timing of two events). The system provides synchronization objects that can be used to coordinate resource sharing among multiple threads. Reducing the number of threads makes it easier to synchronize resources.

            Resources that require synchronization include:

            • System resources (such as communications ports).

            • Resources shared by multiple processes (such as file handles).

            • The resources of a single application domain (such as global, static, and instance fields) accessed by multiple threads.

            4 Threading and Application Design

            In general, using the ThreadPool class is the easiest way to handle multiple threads for relatively short tasks that will not block other threads and when you do not expect any particular scheduling of the tasks. However, there are a number of reasons to create your own threads:

            • If you need a task to have a particular priority.

            • If you have a task that might run a long time (and therefore block other tasks).

            • If you need to place threads into a single-threaded apartment (all ThreadPool threads are in the multithreaded apartment).

            • If you need a stable identity associated with the thread. For example, you should use a dedicated thread to abort that thread, suspend it, or discover it by name.

            • If you need to run background threads that interact with the user interface, the .NET Framework version 2.0 provides a BackgroundWorker component that communicates using events, with cross-thread marshaling to the user-interface thread.

            5 線程的使用方法:
            In Win32 In the common language runtime

            CreateThread

            Combination of Thread and ThreadStart

            TerminateThread

            Thread.Abort

            SuspendThread

            Thread.Suspend

            ResumeThread

            Thread.Resume

            Sleep

            Thread.Sleep

            WaitForSingleObject on the thread handle

            Thread.Join

            ExitThread

            No equivalent

            GetCurrentThread

            Thread.CurrentThread

            SetThreadPriority

            Thread.Priority

            No equivalent

            Thread.Name

            No equivalent

            Thread.IsBackground

            Close to CoInitializeEx (OLE32.DLL)

            Thread.ApartmentState

            6 線程狀態的改變:
            Action Resulting new state

            Another thread calls System.Thread.Start.

            Unchanged

            The thread responds to System.Threading.Thread.Startand starts running.

            Running

            The thread callsSystem.Threading.Thread.Sleep.

            WaitSleepJoin

            The thread calls System.Threading.Monitor.Wait on another object.

            WaitSleepJoin

            The thread calls System.Threading.Thread.Join on another thread.

            WaitSleepJoin

            Another thread calls System.Threading.Thread.Suspend.

            SuspendRequested

            The thread responds to aSystem.Threading.Thread.Suspend request.

            Suspended

            Another thread calls System.Threading.Thread.Resume.

            Running

            Another thread calls System.Threading.Thread.Suspend.

            Running

            Another thread calls System.Threading.Abort.

            AbortRequested

            The thread responds to an System.Threading.Abort.

            Aborted

            7 線程的優先級:
            ?emun: AboveNormal ...
            8 線程的異常:

            9?啟動帶參數的線程:(無參數的更簡單,與之類似)
            ParameterizedThreadStart Delegate

            using ?System;
            using ?System.Threading;

            public ? class ?Work
            {
            ????
            public ? static ? void ?Main()
            ????
            {
            ????????
            // ?To?start?a?thread?using?a?shared?thread?procedure,?use
            ????????
            // ?the?class?name?and?method?name?when?you?create?the?
            ????????
            // ?ParameterizedThreadStart?delegate.
            ????????
            //
            ????????Thread?newThread? = ? new ?Thread(
            ????????????
            new ?ParameterizedThreadStart(Work.DoWork));
            ????????
            ????????
            // ?Use?the?overload?of?the?Start?method?that?has?a
            ????????
            // ?parameter?of?type?Object.?You?can?create?an?object?that
            ????????
            // ?contains?several?pieces?of?data,?or?you?can?pass?any?
            ????????
            // ?reference?type?or?value?type.?The?following?code?passes
            ????????
            // ?the?integer?value?42.
            ????????
            //
            ????????newThread.Start( 42 );

            ????????
            // ?To?start?a?thread?using?an?instance?method?for?the?thread?
            ????????
            // ?procedure,?use?the?instance?variable?and?method?name?when?
            ????????
            // ?you?create?the?ParameterizedThreadStart?delegate.
            ????????
            //
            ????????Work?w? = ? new ?Work();
            ????????newThread?
            = ? new ?Thread(
            ????????????
            new ?ParameterizedThreadStart(w.DoMoreWork));
            ????????
            ????????
            // ?Pass?an?object?containing?data?for?the?thread.
            ????????
            //
            ????????newThread.Start( " The?answer. " );
            ????}

            ?
            ????
            public ? static ? void ?DoWork( object ?data)
            ????
            {
            ????????Console.WriteLine(
            " Static?thread?procedure.?Data='{0}' " ,
            ????????????data);
            ????}


            ????
            public ? void ?DoMoreWork( object ?data)
            ????
            {
            ????????Console.WriteLine(
            " Instance?thread?procedure.?Data='{0}' " ,
            ????????????data);
            ????}

            }


            /* ?This?code?example?produces?the?following?output?(the?order?
            ???of?the?lines?might?vary):

            Static?thread?procedure.?Data='42'
            Instance?thread?procedure.?Data='The?answer'
            */



            10?控制線程的執行:
            using?System;
            using?System.Threading;

            public?class?ThreadControlExample?{

            ????
            private?static?void?DisplayMessage()?{

            ????????
            //?Repeatedly?display?a?message?to?the?console.
            ????????while?(true)?{

            ????????????
            try?{

            ????????????????Console.WriteLine(
            "{0}?:?Second?thread?running.?Enter"
            ????????????????????
            +?"?(S)uspend,?(R)esume,?(I)nterrupt,?or?(E)xit.",
            ????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));

            ????????????????
            //?Sleep?for?2?seconds.
            ????????????????Thread.Sleep(2000);

            ????????????}
            ?catch?(ThreadInterruptedException)?{

            ????????????????
            //?Thread?has?been?interrupted.?Catching?the?
            ????????????????
            //?ThreadInterruptedException?allows?the?example?to?
            ????????????????
            //?take?appropriate?action?and?continue?execution.
            ????????????????Console.WriteLine("{0}?:?Second?thread?interrupted.",
            ????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));

            ????????????}
            ?catch?(ThreadAbortException?abortEx)?{

            ????????????????
            //?The?object?in?the?ThreadAbortException.ExceptionState
            ????????????????
            //?property?is?provided?by?the?thread?that?called?
            ????????????????
            //?Thread.Abort.?In?this?case?it?contains?a?string?that?
            ????????????????
            //?describes?the?reason?for?the?abort.
            ????????????????Console.WriteLine("{0}?:?Second?thread?aborted?({1})",??
            ????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"),
            ????????????????????abortEx.ExceptionState);

            ????????????????
            //?Even?though?ThreadAbortException?has?been?handled,?the
            ????????????????
            //?runtime?will?throw?it?again?to?ensure?the?thread?
            ????????????????
            //?terminates.
            ????????????}

            ????????}

            ????}


            ????
            public?static?void?Main()?{

            ????????
            //?Create?a?new?Thread?object?and?pass?it?a?ThreadStart
            ????????
            //?delegate?instance?that?references?DisplayMessage.
            ????????Thread?thread?=?new?Thread(new?ThreadStart(DisplayMessage));

            ????????Console.WriteLine(
            "{0}?:?Starting?second?thread.",??
            ????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));

            ????????
            //?Start?the?second?thread.
            ????????thread.Start();

            ????????
            //?Loop?and?process?the?command?entered?by?the?user.
            ????????char?command?=?'?';

            ????????
            do?{

            ????????????
            string?input?=?Console.ReadLine();
            ????????????
            if?(input.Length?>?0)?command?=?input.ToUpper()[0];
            ????????????
            else?command?=?'?';

            ????????????
            switch?(command)?{

            ????????????????
            case?'S':
            ????????????????????
            //?Suspend?the?second?thread.
            ????????????????????Console.WriteLine("{0}?:?Suspending?second?thread.",
            ????????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));
            ????????????????????thread.Suspend();
            ????????????????????
            break;

            ????????????????
            case?'R':
            ????????????????????
            //?Resume?the?second?thread.
            ????????????????????try?{?
            ????????????????????????Console.WriteLine(
            "{0}?:?Resuming?second?thread.",
            ????????????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));
            ????????????????????????thread.Resume();
            ????????????????????}
            ?catch?(ThreadStateException)?{
            ????????????????????????Console.WriteLine(
            "{0}?:?Thread?wasn't?suspended.",
            ????????????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));
            ????????????????????}

            ????????????????????
            break;

            ????????????????
            case?'I':
            ????????????????????
            //?Interrupt?the?second?thread.
            ????????????????????Console.WriteLine("{0}?:?Interrupting?second?thread.",
            ????????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));
            ????????????????????thread.Interrupt();
            ????????????????????
            break;

            ????????????????
            case?'E':
            ????????????????????
            //?Abort?the?second?thread?and?pass?a?state?object?to
            ????????????????????
            //?the?thread?being?aborted,?in?this?case?a?message.
            ????????????????????Console.WriteLine("{0}?:?Aborting?second?thread.",??
            ????????????????????????DateTime.Now.ToString(
            "HH:mm:ss.ffff"));

            ????????????????????thread.Abort(
            "Terminating?example.");

            ????????????????????
            //?Wait?for?the?second?thread?to?terminate.
            ????????????????????thread.Join();
            ????????????????????
            break;
            ????????????}

            ????????}
            ?while?(command?!=?'E');

            ????????
            //?Wait?to?continue.
            ????????Console.WriteLine("Main?method?complete.?Press?Enter.");
            ????????Console.ReadLine();
            ????}

            }

            posted on 2006-04-20 18:31 夢在天涯 閱讀(1013) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804303
            • 排名 - 5

            最新評論

            閱讀排行榜

            91麻豆精品国产91久久久久久 | 久久久受www免费人成| 粉嫩小泬无遮挡久久久久久| 久久99精品国产自在现线小黄鸭| 久久精品国产亚洲av日韩| 91久久精品无码一区二区毛片| 一本色道久久88综合日韩精品| 国内精品人妻无码久久久影院 | 中文字幕乱码人妻无码久久| 国产精品久久久久久久久| 久久久久久久久久久免费精品| 亚洲综合伊人久久综合| 色综合久久最新中文字幕| 性高湖久久久久久久久| 久久久久久青草大香综合精品| 欧洲人妻丰满av无码久久不卡| 久久夜色精品国产www| 精品综合久久久久久97超人 | 伊人久久成人成综合网222| 久久香蕉综合色一综合色88| 久久SE精品一区二区| 久久久久国产精品嫩草影院| 精品久久久久久久| 久久精品国产亚洲AV无码偷窥| 狠狠色丁香久久婷婷综合图片| 久久99热这里只有精品国产| 97久久精品人妻人人搡人人玩| 久久国产劲爆AV内射—百度| 亚洲国产成人久久一区久久| 久久国产香蕉视频| 亚洲精品高清久久| 九九久久99综合一区二区| 99精品国产在热久久| 日韩精品久久无码人妻中文字幕| 久久精品一本到99热免费| 伊人色综合九久久天天蜜桃| 久久久久久亚洲精品不卡| 亚洲国产精品综合久久一线| 久久久久99精品成人片牛牛影视| 日韩欧美亚洲国产精品字幕久久久| 久久国产香蕉视频|