哪位高人给讲讲C#中的线程? 哪位高人给讲讲C#中的线程? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 相关资料http://topic.csdn.net/u/20100622/19/ba483234-f4c2-43dc-9374-17bd1602d4b1.html .net 封装的很好了,简单的调用下就哦了 虽然微软给封装好了,但是线程用起来还是比较复杂的,一般简单的应用也就只要用到 线程的start(),stop()方法。像什么abort(),join()等偶尔会用到。线程里面复杂的要算线程要执行的方法,必须是要用委托的。而且在子线程中要更改主线程(或者是线程的创建者,也可以说的界面线程)的某些属性的时候,就必须要用invoke(),或者begininvoke()方法。当多个线程要执行同一方法的时候还要记住要将这个方法lock住。 google 下 线程 进程 区别 看看这个吧,更加详细。http://www.albahari.com/threading/ 给你一个例子using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Threading;namespace Text{ public class AA { FileStream fs; FileStream wfs; byte[] filedata; int len; private void button3_Click(object sender, EventArgs e) { Thread thd, thd2; fs = new FileStream(@"d:\test.txt", FileMode.Open); wfs = new FileStream(@"d:\write.txt", FileMode.Create); len = (int)fs.Length; filedata = new Byte[len]; fs.Read(filedata, 0, len); System.Threading.AutoResetEvent controlThda = new System.Threading.AutoResetEvent(false); System.Threading.AutoResetEvent controlThdb = new System.Threading.AutoResetEvent(false); System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWritetwo), controlThda); System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWriteone), controlThdb); controlThda.WaitOne(); controlThdb.WaitOne(); wfs.Close(); fs.Close(); Console.WriteLine("f"); } private void MultiWriteone(object state) { wfs.Seek(0, SeekOrigin.Begin); wfs.Write(filedata, 0, 5); Console.WriteLine("1 End"); ((System.Threading.AutoResetEvent)state).Set(); } private void MultiWritetwo(object state) { wfs.Seek(5, SeekOrigin.Begin); wfs.Write(filedata, 5, len - 5); Console.WriteLine("2 End"); ((System.Threading.AutoResetEvent)state).Set(); } }} 多线程的优劣/性能/系统开销2009年06月11日 星期四 23:38线程创建之前1.系统为线程分配并初始化一个线程内核对象;2.系统为每个线程保留1MB的地址空间(按需提交)用于线程用户模式堆栈;3.系统为线程分配12KB(左右)的地址空间用于线程的内核模式堆栈。线程创建之后4.Windows调用当前进程中的每个DLL都有的一个函数,用来通知进程中的所有DLL,操作系统创建了一个新的线程。销毁一个线程时5.当前进程中的所有DLL都要接收一个关于该线程即将"死亡"的通知;6.线程的内核对象及创建时系统分配的堆栈需要释放。如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。上下文切换的开销:1.进入内核模式;2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。5.退出内核模式。以上都是纯粹的开销,导致Windows和应用程序的执行速度比在单线程系统上的执行速度慢。综上所述:应尽量限制线程的使用。多线程的带来的好处:1.健壮性。此线程的错误不会影响彼线程。2.可扩展性。多个CPU情况下,可充分发挥多个CPU的优势。 线程 就是 你发现 当你一下子要同时做多件事,时候 用我们传统的man函数没发显示的这时我们就应该考虑到线程,比如你在 计算数据长度的时候又同时显示进度条。至于如何使用 自己找段代码对着写几下就会了。 c# 前端问题 跪求,二级域名重写,大伙来看看 Random random=new Random(); random.next(9);能返回9吗? c#如何调用matlab 中的 nchoosek 难题哦~挑战 如何实现软件升级后退出程序后在进行复制更新文件 在.net2.0下调用有返回值的存储过程,如何获取其返回值? 谢能帮我解决一下这个问题啊,最好写一代码给我啊,十分谢谢 如何动态给picturebox控件的size属性赋值 Net的严重问题 c#语法求教 有关两台或两台以上电脑互传票号的实现
http://www.albahari.com/threading/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
namespace Text
{
public class AA
{
FileStream fs;
FileStream wfs;
byte[] filedata;
int len;
private void button3_Click(object sender, EventArgs e)
{
Thread thd, thd2;
fs = new FileStream(@"d:\test.txt", FileMode.Open);
wfs = new FileStream(@"d:\write.txt", FileMode.Create);
len = (int)fs.Length;
filedata = new Byte[len];
fs.Read(filedata, 0, len);
System.Threading.AutoResetEvent controlThda =
new System.Threading.AutoResetEvent(false);
System.Threading.AutoResetEvent controlThdb =
new System.Threading.AutoResetEvent(false);
System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWritetwo), controlThda);
System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(this.MultiWriteone), controlThdb);
controlThda.WaitOne();
controlThdb.WaitOne(); wfs.Close();
fs.Close();
Console.WriteLine("f"); }
private void MultiWriteone(object state)
{
wfs.Seek(0, SeekOrigin.Begin);
wfs.Write(filedata, 0, 5);
Console.WriteLine("1 End");
((System.Threading.AutoResetEvent)state).Set();
}
private void MultiWritetwo(object state)
{
wfs.Seek(5, SeekOrigin.Begin);
wfs.Write(filedata, 5, len - 5);
Console.WriteLine("2 End");
((System.Threading.AutoResetEvent)state).Set();
} }
}
1.系统为线程分配并初始化一个线程内核对象;
2.系统为每个线程保留1MB的地址空间(按需提交)用于线程用户模式堆栈;
3.系统为线程分配12KB(左右)的地址空间用于线程的内核模式堆栈。
线程创建之后
4.Windows调用当前进程中的每个DLL都有的一个函数,用来通知进程中的所有DLL,操作系统创建了一个新的线程。
销毁一个线程时
5.当前进程中的所有DLL都要接收一个关于该线程即将"死亡"的通知;
6.线程的内核对象及创建时系统分配的堆栈需要释放。
如果某台计算机只有一个CPU的话,则在某一时刻只有一个线程可以运行。
Windows必须跟踪记录线程对象,而且不停地跟踪记录每个线程对象。
Windows必须决定CPU下一个次(每隔约20毫秒)调度那一个线程使其运行。
上下文切换(Context switch):Windows使CPU停止执行一个线程的代码,而开始执行另一个线程的代码的现象,我们称之为上下文切换。上下文切换的开销:1.进入内核模式;
2.将CPU的寄存器保存到当前正在执行的线程的内核对象中。
注明:X86架构下CPU寄存器占了大约700字节(Byte)的空间,X64架构下CPU寄存器大约占了1024(Byte)的空间,IA64架构下CPU寄存器占了大约2500Byte的空间。
3.需要一个自旋锁(spin lock),确定下一次调度那一个线程,然后再释放该自旋锁。
如果下一次调度的线程属于同一个进程,哪么此处开销更大,因为OS必须先切换虚拟地址空间。
4.把即将要运行的线程的内核对象的地址加载到CPU寄存器中。
5.退出内核模式。
以上都是纯粹的开销,导致Windows和应用程序的执行速度比在单线程系统上的执行速度慢。
综上所述:应尽量限制线程的使用。
多线程的带来的好处:
1.健壮性。
此线程的错误不会影响彼线程。
2.可扩展性。
多个CPU情况下,可充分发挥多个CPU的优势。