zoukankan      html  css  js  c++  java
  • 线程

    1,vsvim插件加快速度------------https://www.jianshu.com/p/805f598ddaf0

    2,_vimrc 在C:Usersmxb之中

    3,

    noremap是用于insert模式的非递归映射,
    nnoremap是用于normal模式的非递归映射,
    vnoremap是用于visual模式的非递归映射.

    4,线程的概念

    每个线程都有以下的概念
                 线程内核对象:一个数据结构

                线程环境块:

                    包含线程异常处理链首.每次进入一个try块就在链表首插入一个Node,在退出的时候,删除该节点.

                     包含线程的"线程本地存储数据"和图形设备接口和opengl图形使用的数据结构

                 用户模式栈----存储传给方法的局部变量和实参.并且包含了方法返回时,线程应该从什么地方开始继续执行.

                 内核模式栈----应用程序代码向内核模式函数传递实参时,还会使用内核模式栈.处于安全考虑,将从用户栈向内核栈拷贝.

                 dll线程链接和线程分离通知

                          对于所有非托管dll,  在创建线程时,调用 非托管dll的DllMain函数,并且传递DLL_THREAD_ATTACH标志.

                 当中止时,调用 DLL_THREAD_DETACH标志.

                


    上下文切换------所以windows必须在系统中所有线程之间共享物理cpu. windows任何事件只将一个线程分配给一个cpu,那个线程能运行一个"时间片" quantum.时间片到期,windos就上下文切换到另一个线程:

                     1,将cpu寄存器的值保存到当前运行线程内核对象的一个内部上下文结构中

                     2,从线程集合中选出一个线程供调度.

                     3,将当前线程上下文值加载到cpu的寄存器中.windows大概30ms执行一次上下文切换.


    5,进程优先级概念
    IDle

    Below Normal

    Normal

    Above Normal

    High-------只有绝对必要的时候才使用High优先级.

    Realtime.

    7个线程优先级

    Idle,Lowest,Below Normal,Normal,Above Normal,Highest,Time-Critical.相对于进程优先级.

    其实进程优先级只是便于理解.其进行了优先级映射.


    6,前台进程和后台进程.一个进程的前台线程停止时,强制终止仍然运行的任何后台线程.不抛出异常.

    设定线程的background属性.


    7,聊一聊 t= Task.ContinueWith( ()=>....)

       和  t= Task.ContinueWith(async ()=>…)


    区别 : 使用 await或者wait指令时,当两个匿名函数出现异常的时候

    前者, 可以使用  t.wait 捕捉到.

    后者,产生异常会包装再 t.Result里面(注意,t.Result也是一个Task类型的).所以,需要写成.t.result;

     public static async Task< bool>  WritePLC(Recipe rep, PlcInfoElement infoElement, CancellationToken token)
            {
                           Recipe curRecipe = Recipe.StaticInstance;//引用配方
                Plc plc = new Plc(infoElement.TYPE, infoElement.IP, infoElement.Rack, infoElement.Slot);
    
                Task openTask = plc.OpenAsync();
                Task<Task> writeTask = openTask.ContinueWith(task =>
                {
                if (openTask.IsFaulted) throw openTask.Exception;
                    MessageBox.Show(".........");
                 return plc.WriteBytesAsync(infoElement.DataType, infoElement.DB, infoElement.Start, PlcClassByProperty.ToBytes(curRecipe));
    
                }
                   , token, TaskContinuationOptions.None , TaskScheduler.Default);
    
    
                try
                {
                    writeTask.Wait();
                    MessageBox.Show(writeTask.Status.ToString());
    
                    await writeTask;
                    return true;
                }
                catch (Exception ex)
                {
    
                    MessageBox.Show( ex.Message+"xxx "+ ex.GetType().ToString());
    
                }
                finally
                {
                    plc.Close();
    
                }
    
                return false;
            }
    
  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/frogkiller/p/12458136.html
Copyright © 2011-2022 走看看