线程池之函数的执行
来源:互联网 发布:python 数据类型 编辑:程序博客网 时间:2024/05/18 00:04
static void Main(string[] arg)
{
WaitCallback waitCallback; //回调委托
waitCallback = new WaitCallback(CallBack);
try
{
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to beijing");
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to shanghai");
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "好想吃在饼");
Console.WriteLine("Main thread. Is pool thread: {0}, Hash: {1}",
Thread.CurrentThread.IsThreadPoolThread,
Thread.CurrentThread.GetHashCode());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
static void CallBack(object state)
{
Console.WriteLine("状态:" + state.ToString());
Console.WriteLine("Processing request '{0}'." +
" Is pool thread: {1}, Hash: {2}",
(string)state, Thread.CurrentThread.IsThreadPoolThread,
Thread.CurrentThread.GetHashCode());
//加上阻塞延时,使程序回到Main函数继续执行.
Thread.Sleep(2000);
System.Console.WriteLine("Finished");
}
当把Thread.Sleep(2000);替换为:
int ticks = Environment.TickCount;
while (Environment.TickCount - ticks < 2000) ;
即关闭线程阻塞,而改用显示循环执行。会有什么样的结果呢?
从运行结果可以看出,第三个线程执行请求,将在第一个执行完后才开始运行。
这是因为,当没有新线程创建时,线程池发现cpu的使用率达到100%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。
{
WaitCallback waitCallback; //回调委托
waitCallback = new WaitCallback(CallBack);
try
{
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to beijing");
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "let's go to shanghai");
System.Threading.ThreadPool.QueueUserWorkItem(waitCallback, "好想吃在饼");
Console.WriteLine("Main thread. Is pool thread: {0}, Hash: {1}",
Thread.CurrentThread.IsThreadPoolThread,
Thread.CurrentThread.GetHashCode());
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.ReadLine();
}
static void CallBack(object state)
{
Console.WriteLine("状态:" + state.ToString());
Console.WriteLine("Processing request '{0}'." +
" Is pool thread: {1}, Hash: {2}",
(string)state, Thread.CurrentThread.IsThreadPoolThread,
Thread.CurrentThread.GetHashCode());
//加上阻塞延时,使程序回到Main函数继续执行.
Thread.Sleep(2000);
System.Console.WriteLine("Finished");
}
当把Thread.Sleep(2000);替换为:
int ticks = Environment.TickCount;
while (Environment.TickCount - ticks < 2000) ;
即关闭线程阻塞,而改用显示循环执行。会有什么样的结果呢?
从运行结果可以看出,第三个线程执行请求,将在第一个执行完后才开始运行。
这是因为,当没有新线程创建时,线程池发现cpu的使用率达到100%,它将会处于阻塞状态,直到有活动的线程。从总体上来说,这种方案较佳,尤其是线程中线程数量过大时,这样能减少线程之间的切换时间。
- 线程池之函数的执行
- Chapter11-"windows线程池"之 间隔执行函数
- objective 取消执行的延迟函数 -- 线程
- 修补bug之路——关于线程执行函数全局的问题
- 在MFC中定义线程对应的线程执行函数
- 线程池的执行流程
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- Linux多线程编程之创建两个子线程,分别执行子线程函数(注意编译方式)
- WebRTC学习之函数的异步执行
- loner_li 线程池之 方法执行顺序与方法位置的先后无关
- (十七)java并发编程--任务执行之线程池的使用
- SendMessage的执行线程
- 取消线程的执行
- javaScript 线程的执行
- 线程的执行状态图
- 将一个函数在主线程执行及子线程执行的方法
- C#中使用GDI+制作个性化的网站新闻标题
- e.hasMorePages有一个用法
- UNIX系统操作命令
- asp.net页面缓存问题(转)
- Google小组研发模式分析
- 线程池之函数的执行
- C#编程规范(2008年4月新版)
- 忍耐比努力更重要
- 计算最少用到的硬币个数以用每种面值的用数
- 世界最早一批女性电脑高手往事
- 常用编辑器比较
- 跳槽为何是第一生产力?
- 线程池之定时器
- Jbuilder2007如何打开Jbuilder2006的GUI项目程序?