代码改变世界

随笔分类 -  Thread

多线程之同步和死锁(转载)

2010-03-05 15:14 by 爱研究源码的javaer, 288 阅读, 收藏,
摘要: classProgram{privatestaticObjectobjA=newObject();privatestaticObjectobjB=newObject();publicstaticvoidLockA(){if(Monitor.TryEnter(objA,1000)){Thread.Sleep(1000);if(Monitor.TryEnter(objB,2000)){Monitor.... 阅读全文

WaitOne学习笔记一(转载)

2010-03-03 21:35 by 爱研究源码的javaer, 2015 阅读, 收藏,
摘要: WaitHandle用于实现对共享资源的独占访问,AutoResetEvent和ManualResetEvent都继承自它。WaitHandle.WaitOne方法将阻塞当前线程,直到WaitHandle收到信号。但有时候,我们需要非阻塞的方式测试WaitHandle状态,翻阅MSDN发现WaitOne有多个重载版本,其中可以指定等待的时间间隔。如果当前实例收到信号,则为true;否则为false... 阅读全文

多线程学习笔记之ManualResetEvent(三)(转载)

2010-03-02 21:54 by 爱研究源码的javaer, 387 阅读, 收藏,
摘要: 转自 http://www.cnblogs.com/vcool/archive/2008/05/13/1195213.html在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别。Set方法将信号置为发送状态,Reset方法将信号置为不发送状态,WaitOne等待信号的发送。可以通过构造函数的参数值来决定其初始状态,... 阅读全文

多线程学习笔记之更新UI控件(转载)

2010-03-02 21:33 by 爱研究源码的javaer, 325 阅读, 收藏,
摘要: winform中的UI控件不是线程安全的,如果可以随意在任何线程中改变其值,你创建一个线程,我创建一个线程,大家都来抢着更改"TextBox1"的值,没有任何秩序的话,天下大乱...解决办法:1.掩耳盗铃法(Control.CheckForIllegalCrossThreadCalls = false;)--仅Winform有效 [代码]设置Control.CheckForIllegalCross... 阅读全文

多线程学习笔记之ManualResetEvent(二)(转载)

2010-03-02 21:20 by 爱研究源码的javaer, 216 阅读, 收藏,
摘要: 问题:如果需求有变化,比如要求在主线程执行到某个特定的位置(或时间点)时,才让其它线程开始介入,该怎么做呢?(这种情况实际中很常见,比如某一项计算的入口参数依赖于另一项计算的结果,再比如我们计算月工资前,得先统计出员工当月考勤情况)System.Threading命名空间下有一个ManualResetEvent类,可以做到这一点:[代码]t1方法中,我们用 mre.WaitOne(1000);让调... 阅读全文

多线程学习笔记之ManualResetEvent(一)(转载)

2010-03-02 20:34 by 爱研究源码的javaer, 245 阅读, 收藏,
摘要: 线程是程序中的控制流程的封装。你可能已经习惯于写单线程程序,也就是,程序在它们的代码中一次只在一条路中执行。如果你多弄几个线程的话,代码运行可能会更加“同步”。在一个有着多线程的典型进程中,零个或更多线程在同时运行。但是,在有着N个CPU的机器上,一个线程只能在给定的时间上在一个CPU上运行,因为每个线程都是一个代码段,每个CPU一次只能运行一段代码。而看起来像是N个同时完... 阅读全文

委托之异步学习(转载)

2010-03-02 14:06 by 爱研究源码的javaer, 218 阅读, 收藏,
摘要: 在 使用BackgroundWorker组件 一文中,阐述了在Winform编程中,使用BackgroundWorker组件实现异步调用,本文主要讲述利用委托实现异步。以下描述摘抄于MSDN:异步委托提供以异步方式调用同步方法的能力。当同步调用委托时,Invoke()方法直接对当前线程调用目标方法;当异步调用委托时,CLR将对请求进行排队并立即返回到调用方,将对来自线程池的线程调用该目标方法,提交... 阅读全文

BackGroundWorker学习

2010-03-01 20:50 by 爱研究源码的javaer, 299 阅读, 收藏,
摘要: 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicpartialclassFrmBackGroundWorker:Form{publicFrmBackGroundWorker(){InitializeComponent();}priva... 阅读全文

多线程学习笔记

2010-03-01 16:46 by 爱研究源码的javaer, 222 阅读, 收藏,
摘要: 当用户执行一个非常耗时的操作时,如果不借助Thread编程,用户就会感觉界面反映很迟钝。在.Net 2.0中可以通过BackgroundWork非常方便地进行Thread编程,大致的步骤是:1、调用BackgroundWorker的RunWorkerAsync方法(可以传递参数),它将调用DoWork事件2、在DoWork的事件响应代码中调用耗时的操作,此例中是PingIPs函数3、在耗时操作中判... 阅读全文

Delegate学习之使用委托进行异步编程

2010-02-26 22:30 by 爱研究源码的javaer, 275 阅读, 收藏,
摘要: 异步委托提供以异步方式调用同步方法的能力。当同步调用一个委托时,“Invoke”方法直接对当前线程调用目标方法。如果编译器支持异步委托,则它将生成“Invoke”方法以及“BeginInvoke”和“EndInvoke”方法。如果调用“BeginInvoke”方法,则公共语言运行... 阅读全文

C#实现Treeview节点"正在载入..."效果

2010-02-25 12:50 by 爱研究源码的javaer, 468 阅读, 收藏,
摘要: 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--publicpartialclassFrmTreeView:Form{publicFrmTreeView(){InitializeComponent();}privatevoidFrmTreeVie... 阅读全文

多线程学习笔记一(转载)

2010-02-24 13:40 by 爱研究源码的javaer, 230 阅读, 收藏,
摘要: 本片(参考自codeproject)主要讲以下内容:(一).Sleep和Join的用法(二).Invoke和BeginInvoke的使用及区别(三).Monitor类的使用(四).AutoResetEvent使用(一)1.Sleep()方法,调用后,线程会被阻止指定的时间,时间到了后,会继续执行。线程需引用using System.Threading;命名空间。[代码]2.Join()方法,肯定有... 阅读全文

ThreadManager

2010-02-06 16:46 by 爱研究源码的javaer, 196 阅读, 收藏,
摘要: http://www.cnblogs.com/tallman/archive/2007/05/10/741639.html 阅读全文