青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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 夢在天涯 閱讀(1027) 評論(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

搜索

  •  

積分與排名

  • 積分 - 1816909
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              久久精品夜夜夜夜久久| 欧美日韩在线第一页| 在线视频日韩| 另类激情亚洲| 久久riav二区三区| 欧美日韩日日骚| 亚洲福利视频在线| 国模叶桐国产精品一区| 中文精品视频| 亚洲一区二区三区四区视频| 欧美大片在线观看一区二区| 麻豆freexxxx性91精品| 国产欧美一区二区精品婷婷 | 亚洲综合日本| 亚洲一区二区免费看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产真实久久| 欧美一级一区| 久久精精品视频| 国产人成一区二区三区影院| 中文欧美在线视频| 亚洲自拍啪啪| 国产精品一区一区三区| 亚洲一区二区成人| 午夜精品免费| 国产午夜久久久久| 欧美中文字幕视频在线观看| 欧美在线视频不卡| 国产一区二区毛片| 欧美一区深夜视频| 美女免费视频一区| 亚洲国产美女| 欧美久久久久久久| 日韩系列在线| 小嫩嫩精品导航| 国产精品丝袜xxxxxxx| 亚洲综合色激情五月| 久久成人羞羞网站| 伊人久久成人| 浪潮色综合久久天堂| 亚洲国产天堂久久综合网| 日韩视频在线一区| 国产精品yjizz| 午夜精品久久久久久久蜜桃app| 久久aⅴ乱码一区二区三区| 国产一区视频观看| 麻豆精品视频| 一区二区三区视频观看| 久久精品日韩欧美| 91久久精品美女| 国产精品h在线观看| 欧美一级视频| 亚洲激情欧美激情| 欧美亚洲一区二区在线| 一区二区三区亚洲| 欧美日韩视频在线| 欧美亚洲一区二区三区| 亚洲国产精品久久久久婷婷老年| 亚洲视频一区在线观看| 国产亚洲人成a一在线v站 | 在线观看不卡| 欧美三级在线播放| 久久精品主播| 亚洲特黄一级片| 欧美 日韩 国产一区二区在线视频| 99re66热这里只有精品4| 国产精品一区二区在线| 欧美成人免费全部观看天天性色| 亚洲视频一二区| 亚洲大胆女人| 久久精品人人| 亚洲一区制服诱惑| 亚洲国产精品日韩| 国产日韩欧美综合一区| 欧美久久精品午夜青青大伊人| 欧美一区二区日韩一区二区| 日韩视频在线观看| 欧美va天堂va视频va在线| 午夜久久99| 亚洲深夜福利视频| 最新国产乱人伦偷精品免费网站 | 亚洲精品在线观看免费| 另类春色校园亚洲| 欧美一区二区高清| 亚洲午夜视频在线观看| 亚洲日本理论电影| 尤物在线观看一区| 国产亚洲一级高清| 国产精品裸体一区二区三区| 欧美区二区三区| 欧美sm视频| 久久天天躁夜夜躁狠狠躁2022 | 国产日韩欧美在线视频观看| 欧美日韩网站| 欧美黑人一区二区三区| 久热精品视频| 久久―日本道色综合久久| 欧美在现视频| 欧美一二三区在线观看| 亚洲专区国产精品| 亚洲综合另类| 亚洲综合色婷婷| 午夜激情久久久| 亚洲欧美中文日韩v在线观看| 亚洲视频 欧洲视频| 一区二区三区av| 亚洲午夜电影网| 亚洲一区欧美一区| 午夜精品www| 欧美亚洲免费在线| 久久都是精品| 久久性天堂网| 欧美激情亚洲| 欧美日韩精品久久久| 欧美三级视频在线观看| 国产精品久久久久久模特| 国产精品视频99| 国产一区二区三区观看| 精品99视频| 亚洲免费电影在线观看| 亚洲视频一区二区| 欧美一区1区三区3区公司| 久久国产66| 欧美激情第一页xxx| 亚洲人成网站色ww在线| 一本色道综合亚洲| 羞羞色国产精品| 久久久综合精品| 欧美日韩精品二区第二页| 国产精品播放| 红桃视频一区| 日韩视频在线观看免费| 亚洲欧美成人一区二区三区| 久久久精品tv| 91久久久久| 午夜亚洲福利| 欧美激情亚洲视频| 国产精品女人网站| 亚洲第一色在线| 亚洲尤物在线视频观看| 久久久久久亚洲综合影院红桃 | 在线成人性视频| 一本色道久久综合亚洲91| 性欧美办公室18xxxxhd| 男女精品视频| 亚洲特级片在线| 欧美va亚洲va国产综合| 国产精品乱子久久久久| 亚洲国产精品一区二区久| 亚洲欧美高清| 亚洲电影在线免费观看| 亚洲午夜国产一区99re久久| 久久综合中文| 国产麻豆视频精品| 99riav国产精品| 另类人畜视频在线| 亚洲午夜未删减在线观看| 欧美 日韩 国产 一区| 欧美日韩一区二区三区视频| 激情欧美一区| 欧美亚洲免费在线| 亚洲人在线视频| 亚洲无限av看| 一区二区三区在线免费播放| 亚洲永久免费| 亚洲黄色在线| 久久蜜桃资源一区二区老牛| 国产精品专区一| 亚洲免费高清视频| 免费观看久久久4p| 欧美在线国产精品| 国产精品普通话对白| 一区二区三区高清| 亚洲黄色成人久久久| 99在线热播精品免费| 亚洲自拍偷拍视频| 99视频一区| 欧美激情一区| 亚洲裸体在线观看| 欧美成人免费在线观看| 久久精品国产2020观看福利| 国产伦精品一区二区三区免费 | 亚洲国内高清视频| 免播放器亚洲一区| 久久精品国产亚洲高清剧情介绍| 国产麻豆一精品一av一免费| 亚洲女女做受ⅹxx高潮| 99在线|亚洲一区二区| 欧美国产精品一区| 美腿丝袜亚洲色图| 在线国产欧美| 欧美大色视频| 欧美gay视频| 亚洲免费观看在线观看| 最新高清无码专区| 欧美日本中文字幕| 亚洲天堂av电影| 亚洲午夜一区二区| 国产精品一香蕉国产线看观看| 欧美一区二区精品在线|