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;
            }
    
  • 相关阅读:
    (转)SpringBoot使用@Value给静态变量注入
    关于Oracle to_date函数的高级用法
    Nginx实践篇(5)- Nginx代理服务
    SpringBoot @Autowired中注入静态方法或者静态变量
    SpringBoot MAVEN编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:
    SpringBoot项目中禁用HttpClient那些嘈杂的日志
    生成SQL Server数据字典
    SqlServer 查看最近执行过的语句
    为二级域名注册ssl证书,并强制使用https对http进行跳转
    CentOS 7 配置nginx并默认强制使用https对http进行跳转
  • 原文地址:https://www.cnblogs.com/frogkiller/p/12458136.html
Copyright © 2011-2022 走看看