当前位置: 首页 > news >正文

文化推广网站建设心得/seo属于运营还是技术

文化推广网站建设心得,seo属于运营还是技术,平台网站建设的公司,网站如何防盗链当我们在使用线程中,你会发现主线结束后子线程的结果才显示出来。现在我要等待所以子线程结束,然后在显示结果,怎么做呢? 方法如下: 1、使用 ManualResetEvent,代码如下: using System.Threadi…

当我们在使用线程中,你会发现主线结束后子线程的结果才显示出来。现在我要等待所以子线程结束,然后在显示结果,怎么做呢?

方法如下:

1、使用 ManualResetEvent,代码如下: 

复制代码
using System.Threading;

namespace ThreadStudy
{
    /// <summary>
    /// 等待所有子线程结束
    /// </summary>
    class StopAllWaitBySubThread
    {
        List<ManualResetEvent> manualEvents = new List<ManualResetEvent>();
        public void Main()
        {
            for (int i = 0; i < 5; i++)
            {
                ManualResetEvent mre = new ManualResetEvent(false);
                manualEvents.Add(mre);
                ThreadPool.QueueUserWorkItem(ThreadMethod, mre);
            }
            WaitHandle.WaitAll(manualEvents.ToArray());
            Console.WriteLine("Thread Finished!");
        }

        private void ThreadMethod(object obj)
        {
            //等待2秒,用于模拟系统在处理事情
            Thread.Sleep(2000);

            ManualResetEvent mre = (ManualResetEvent)obj;
            mre.Set();
            Console.WriteLine("Thread execute");
        }
    }
}
复制代码

 此种方法线程中只传递了信号,那要传递参数怎么办?可以采用类,将信号放在类中来解决,代码如下。

 

复制代码
using System.Threading;

namespace ThreadStudy
{
    /// <summary>
    /// 等待所有子线程结束
    /// </summary>
    class StopAllWaitBySubThread
    {
        List<ManualResetEvent> manualEvents = new List<ManualResetEvent>();
        public void Main()
        {
            for (int i = 0; i < 5; i++)
            {
                ManualResetEvent mre = new ManualResetEvent(false);
                manualEvents.Add(mre);
                Param pra = new Param();
                pra.mrEvent = mre;
                pra.praData = i;
                ThreadPool.QueueUserWorkItem(ThreadMethod, pra);
            }
            WaitHandle.WaitAll(manualEvents.ToArray());
            Console.WriteLine("Thread Finished!");
        }

        private void ThreadMethod(object obj)
        {
            Thread.Sleep(2000);
            Param pra = (Param)obj;
            pra.mrEvent.Set();
            Console.WriteLine("Thread execute at {0}", pra.praData);
        }
    }

    public class Param
    {
        public ManualResetEvent mrEvent;
        public int praData;
    }
}
复制代码

 

2、判断线程数

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Threading;

namespace ThreadStudy
{
    /// <summary>
    /// 判断当所有子线程执行完毕
    /// </summary>
    class ThreadPoolStop
    {
        public void Main()
        {
            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadMethod), i);
            }
            int maxWorkerThreads, workerThreads;
            int portThreads;
            while (true)
            {
                /*
                 GetAvailableThreads():检索由 GetMaxThreads 返回的线程池线程的最大数目和当前活动数目之间的差值。
                 而GetMaxThreads 检索可以同时处于活动状态的线程池请求的数目。
                 通过最大数目减可用数目就可以得到当前活动线程的数目,如果为零,那就说明没有活动线程,说明所有线程运行完毕。
                 */
                ThreadPool.GetMaxThreads(out maxWorkerThreads, out portThreads);
                ThreadPool.GetAvailableThreads(out workerThreads, out portThreads);
                if (maxWorkerThreads - workerThreads == 0)
                {
                    Console.WriteLine("Thread Finished!");
                    break;
                }
            }
        }

        private void ThreadMethod(object i)
        {
//模拟程序运行
            Thread.Sleep((new Random().Next(1, 4)) * 1000);
            Console.WriteLine("Thread execute at {0}", i.ToString());
        }
    }
}
复制代码

 

 3、使用Monitor 

复制代码
using System.Threading;

namespace ThreadStudy
{
    class StopAllSubThread
    {
        int _ThreadCount = 5;
        int finishcount = 0;
        object locker = new object();
        public void Main()
        {
            for (int i = 0; i < _ThreadCount; i++)
            {
                Thread trd = new Thread(new ParameterizedThreadStart(ThreadMethod));
                trd.Start(i);
            }
            lock (locker)
            {
                while (finishcount != _ThreadCount)
                {
                    Monitor.Wait(locker);//等待
                }
            }
            Console.WriteLine("Thread Finished!");
        }

        private void ThreadMethod(object obj)
        {
            //模拟执行程序
            Thread.Sleep(3000);
            Console.WriteLine("Thread execute at {0}", obj.ToString());
            lock (locker)
            {
                finishcount++;
                Monitor.Pulse(locker); //完成,通知等待队列,告知已完,执行下一个。
            }
        }
    }
}
复制代码

 

http://www.lbrq.cn/news/746587.html

相关文章:

  • 吉安手机网站建设/注册推广
  • 织梦网站模板视频/html友情链接代码
  • 谷歌做英文网站/上海关键词排名软件
  • 张掖专业做网站的公司/温州网站建设
  • 做调查赚钱网站/职业培训机构
  • 青岛 两学一做 网站/网络广告营销典型案例
  • 设计公司网站什么重要/全案网络推广公司
  • 桂林网站seo/百度账号购买1元40个
  • 网站建设流程有哪七步/怎样利用互联网进行网络推广
  • 做赌博的网站违不违法/大连seo按天付费
  • wordpress批量删掉文章内的文字/抖音seo是什么意思
  • 网站建设属于移动互联网/南宁百度首页优化
  • 揭阳网站制作专业/网站排名系统
  • 无锡网站建设 网站制作/出词
  • 想让客户公司做网站的话语/广西seo公司
  • wordpress 下载站/小程序开发公司十大排名
  • 快速做彩平图得网站/外链推广软件
  • html5可不可以建设手机网站/制作电商网站
  • 北京公司请做网站工资/南宁关键词优化软件
  • 专业企业网站开发/网络推广赚钱平台有哪些
  • 做新闻微网站有哪些方面/web前端培训费用大概多少
  • 南昌建设企业网站公司/网络营销外包推广价格
  • 女人和男人做爰网站/营销方案网站
  • 网站建设加微信/守游网络推广平台
  • 网站建设整体方案/搜狗网站seo
  • 郑州新密网站建设/今天的新闻 联播最新消息
  • 做出网站/网页制作公司哪家好
  • 北京上地做网站/重庆网站关键词排名优化
  • 单页网站怎么做排名/google推广费用
  • 如何做贷款网站/营销软文小短文
  • 学习嵌入式的第二十一天——数据结构——链表
  • AJAX (一)
  • 机器学习(决策树)
  • 决策树的笔记
  • 在嵌入式单片机开发中,通过校验和或者校验码来比对程序版本好有何优劣势
  • 编程算法实例-Armstrong数(阿姆斯特朗数)