[置顶]python知识导航贴,持续更新

[置顶]C# 语言高级特性知识导航贴,持续更新

[置顶]netMarketing类库: 类库说明

[置顶]本站视觉相关教程整理贴子,持续更新

[置顶]C++相关导航贴,持续更新

[置顶]本站收费服务公告(netMarketing源码,工业自动化行业培训班等)

[置顶]2020年勇哥的机器视觉实验项目清单(大纲)

[置顶]本站连载贴子系列,持续更新中……

[置顶]勇哥的免费视频教程清单

[置顶]勇哥在B站发布的视频清单

[置顶]运动控制专题,持续更新

C#多线程系列(3):原子操作

简介: C#多线程系列(3):原子操作知识点竞争条件当两个或两个以上的线程访问共享数据,并且尝试同时改变它时,就发生争用的情况。它们所依赖的那部分共享数据,叫做竞争条件。数据争用是竞争条件中的一种,出现竞争条件可能会导致内存(数据)损坏或者出现不确定性的行为。线程同步如果有 N 个线程都会执行某个操作,当一个线程正在执行这个操作时,其它线程都必须依次等待,这就是线程同步。多线程环境下出现竞争条件,...

C#多线程(4):进程同步Mutex类

简介: C#多线程(4):进程同步Mutex类Mutex 类Mutex 中文为互斥,Mutex 类叫做互斥锁。它还可用于进程间同步的同步基元。Mutex 跟 lock 相似,但是 Mutex 支持多个进程。Mutex 大约比 lock 慢 20 倍。互斥锁(Mutex),用于多线程中防止两条线程同时对一个公共资源进行读写的机制。Windows 操作系统中,Mutex 同步对象有两个状态:signa...

C#多线程(5):资源池限制

简介: C#多线程(5):资源池限制Semaphore、SemaphoreSlim 类两者都可以限制同时访问某一资源或资源池的线程数。这里先不扯理论,我们从案例入手,通过示例代码,慢慢深入了解。Semaphore 类这里,先列出 Semaphore 类常用的 API。其构造函数如下:构造函数说明Semaphore(Int32, Int32)初始化 Semaphore 类的新实例,并指定初始入口数和...

C#多线程(7):手动线程通知

简介: C#多线程(7):手动线程通知区别与示例AutoResetEvent 和 ManualResetEvent 十分相似。两者之间的区别,在于前者是自动(Auto),后者是手动(Manua)。你可以先运行下面的示例,再测试两者的区别。AutoResetEvent 示例:class Program { // 线程通知 private static A...

C#多线程(6):线程通知

简介: C#多线程(6):线程通知AutoRestEvent 类用于从一个线程向另一个线程发送通知。微软文档是这样介绍的:表示线程同步事件在一个等待线程释放后收到信号时自动重置。其构造函数只有一个:构造函数里面的参数用于设置信号状态。构造函数说明AutoResetEvent(Boolean)用一个指示是否将初始状态设置为终止的布尔值初始化 AutoResetEvent 类的新实例。真糟糕的机器翻译...

C#多线程(8):线程完成数

简介: C#多线程(8):线程完成数解决一个问题假如,程序需要向一个 Web 发送 5 次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。示例代码如下:class Program { private static int count = 0; static void Main(string[] args) {...

C#多线程(9):多阶段并行线程

引用自: https://developer.aliyun.com/article/906607 简介: C#多线程(9):多阶段并行线程前言这一篇,我们将学习用于实现并行任务、使得多个线程有序同步完成多个阶段的任务。应用场景主要是控制 N 个线程(可随时增加或减少执行的线程),使得多线程在能够在 M 个阶段中保持同步。线程工作情况如下:我们接下来 将学习C# 中的 Barrier ,用于实现并行...

C#多线程(10):读写锁

引用一篇文章:https://developer.aliyun.com/article/907006 ReaderWriterLockSlimReaderWriterLock 类:定义支持单个写线程和多个读线程的锁。ReaderWriterLockSlim 类:表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。两者的 API 十分接近,而且 ReaderWriterLockSl...

C# 勇哥关于多线程读写plc内存的研究续,长期间运行出现的若干问题的研究

勇哥注:我们继续上一篇《C# 勇哥关于多线程读写plc内存的研究续,引用ReaderWriterLockSlim锁带来的读操作并发的问题》此系列贴子已经写了好几篇了:(4)C# 勇哥关于多线程读写plc内存的研究续,引用ReaderWriterLockSlim锁带来的读操作并发的问题http://www.skcircle.com/?id=1995(3)C# 勇哥关于多线程读写plc内存的研究续,解...

C# .net Framework下的 ImmutableList 不变对象集合类的使用方法

勇哥注:不可变对象集合类由于其特性,天生就是线程安全的,多线程同时读写都没得问题。它一共有下面这些:ImmutableArray<T>ImmutableStack<T>ImmutableQueue<T>ImmutableList<T>ImmutableHashSet<T>ImmutableSortedSet<T>Immutab...

C# .Net中的不可变集合(Immutable Collection)程序集简介

MS在Nuget上发布了一个Immutable Collection的程序集,提供了对不可变对象的集合的支持。简单的看了一下,貌似支持的还比较全:ImmutableArray<T>ImmutableStack<T>ImmutableQueue<T>ImmutableList<T>ImmutableHashSet<T>ImmutableSo...

C# 勇哥关于多线程读写plc内存的研究续,引用ReaderWriterLockSlim锁带来的读操作并发的问题

勇哥注:我们继续上一篇《C# 勇哥关于多线程读写plc内存的研究续,解决UI控件读写的效率问题》此系列贴子已经写了好几篇了:(3)C# 勇哥关于多线程读写plc内存的研究续,解决UI控件读写的效率问题http://www.skcircle.com/?id=1985(2)C# 勇哥关于多线程读写plc内存的研究续,解决lock锁的效率问题http://www.skcircle.com/?id=198...

C# List的深度复制

由于List之间的相等的话,等于是把List的地址给赋值过去了,赋值后的List变化,会改变原有的List,并没有起到备份原始数据的作用,对于没有嵌套的List,可以采用遍历重新赋值的方法去赋值(传递的是值类型,并非引用类型),若List内的数据是一个类的话,赋值的时候需要重新实例化才行。但如果是嵌套的List列表,遍历这种方法就麻烦了很多。因此,常见的对List进行复制克隆的方法,有以下三种:方...

C# 界面定时器控件Timer的回调函数中有问题代码影响ui刷新效率的问题

今天继续研究“多线程读plc内存“时发现一个问题。我弄了一个定时器,以300ms间隔时间,执行读plc的4个内存地址的工作。然后,拖动窗口时明显感觉很卡。timer中写了4条输出信息到控件上的语句。每条输出控件的语句都使用了BeginInvoke方式的委托。 private void timer1_Tick(object sender, EventArgs e) {...

C# 在使用DockPanel时 需要注意的几个小问题

1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1。2.引用—>添加引用—>浏览—>weiFenLuo.winFormsUI.Docking.dll。3.设置Form1窗体属性IsMdiContainer:True。4.工具箱—>右键—>选择项—>.net组件—>浏览—>weiFenLuo.winFormsUI.Docking...

WeifenLuo.WinFormsUI.Docking"的使用如何控制自动停靠窗口的大小

在使用这个控件的时候,估计大家都会碰到 这样一个问题,就是当窗口是自动隐藏的时候,好像出来的大小一般比实际的大,感觉不太美观,有没有什么方法可以控制它的呢,答案是当然有了,其实实现起来也很简单。 [LocalizedCategory("Category_Docking")] [LocalizedDescription("DockConte...

C# weifenluo docking 布局时遇到的一些问题

基础布局网上有的是,不再赘述,在此仅描写一些犄角噶蓝儿,不容易查到,但会遇到的问题:1,假设共3个区域,想让布局显示方式为左侧一个区域,右侧呈上下区域。通过dockpanel.show(参数)逐一show出来,结果却发现可能布局与自己想象的不一致。结果布局可能为上一个区域,左右两个区域的这种布局,图:,解决方案:改变代码show的顺序即可。图:2,点击首页按钮,自动在document区域新增首页。...

C# WeifenLuo Docking组件中如何设置停靠窗体的宽度

停靠窗体有两种状态,一种是固定停靠显示,一种是自动隐藏停靠显示。表现为“自动隐藏”按钮是否处于按下状态。针对这两种状态,可以分别设置两个对应的属性,即可实现指定停靠窗体宽度的目的。约定:mainForm是主窗体,主窗体上放置了一个DockPanel;dockForm是停靠窗体,停靠在主窗体的右部即:dockForm.DockArea = DockAreas.DockRight; 一、固定停靠显示即...

C# 勇哥工作中的杂记:docking和osgi的杂记

勇哥注:此为工作中的杂记,也是方便自己查阅。所以不会费心做基础解释,如果各位感觉有用的部分可以留言和勇哥讨论。持续记录中。。。。(四) 为什么这个表格控件已经置为dockstyle.fill了,但是无法填充满容器。红色区域为无法填充满的位置。这个填充不满的区域,在切换窗口时,有可能会出现刷新的问题。这个问题确实古怪,它并不是控件属性Margin的问题。这个datagridview无论放在什么容器内...

C# 勇哥对于Stopwatch进一步了解:精确测量运行时间

一般测量时间间隔使用的是DateTime.Now实例的DateTime.Ticks当前属性,想要精确测量一个操作的运行时间就只能使用Stopwatch类计时了。Stopwatch计时精度取决于硬件,如果安装的硬件和操作系统支持高分辨率性能计数器, 则Stopwatch类将使用该计数器来测量运行时间。,否则,Stopwatch类将使用系统计时器来测量运行时间。测量耗时操作的运行时间:...

勇哥的小娱乐:Halcon做fc游戏的自动打怪AI(1)连续窗口截图

勇哥注: 这个系列是勇哥的小娱乐。这么多年来感觉自己就是工作机器,没有一点属于自己的乐子。 突然想到儿时的小梦想是写个fc的坦克大战。要不,先弄个AI,让它自动玩坦克大战吧。fc的坦克大战是fc模拟器的游戏,要做自动打怪的AI,可以考虑连续窗口截图,然后交由halcon进行处理。处理结果交由策略代码处理,最后发布手柄控制指令。因此,首先先要考虑窗口的连续帧如何实时截取,然后就是如何实现虚拟...

C# 勇哥关于多线程读写plc内存的研究续,解决UI控件读写的效率问题

勇哥注:我们继续上一篇《C# 勇哥关于多线程读写plc内存的研究续,解决lock锁的效率问题》上一篇我们解决了lock锁的效率问题。本节我们继续讨论一下控件读写的效率问题。由下图中,我们看到的RichTextBox.SetText,它占6.44%的效率。本着程序员的工匠精神,我们也要把这部分耗能解决掉。直接说答案:我们在上节代码中,使用了Invoke输出RichTextBox的文本。也就是使用委托...

C# 多线程安全的无序集合ConcurrentBag

勇哥注:ConcurrentBag是一个线程安全的无序集合。专为生产消费模式进行订制的集合。如果多线程使用List<T>就会遇到问题:System.InvalidOperationException:“集合已修改;可能无法执行枚举操作。”。原因是timer2在遍历list的过程当中,timer1修改了list,使其大小发生了变化。如果使用ConcurrentBag这类安全集合,可以避免...

C# 勇哥关于多线程读写plc内存的研究续,解决lock锁的效率问题

勇哥注:我们继续上一篇《勇哥关于多线程读写plc内存的研究》在上篇结尾,我们看到lock锁带来的效率问题。本着程序员应有的工匠精神,本节我们来研究并解决这个问题。先回顾一下上篇文章结尾勇哥截的程序效率图。Monitor.Enter的函数占用cpu时间75.85%,此耗能大户就是lock锁。(因为lock关键字实际上是Monitor的语法糖)由于plc读写操作中,读的次数一定远大于写入的次数,因此我...

C#读写锁ReaderWriterLockSlim

这篇文章向大家介绍了读写锁ReaderWriterLockSlim,其优点就是多个线程可以同时读取该对象,要了解更多读写锁的知识,仔细阅读下文吧读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁。在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能。某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用loc...

C# 勇哥关于多线程读写plc内存的研究

勇哥注: 多线程读写非全双工的硬件资源,是个实现比较困难的任务。 有不服气的同学可以尽管一试。我们说一个硬件如果是全双工,则表示它的读写是两个信道,可以同时进行。但是像很多品牌的plc,一般是不能全双工进行通讯的;另外还有串口,我们也不能全双工通讯。如果你的系统只有一个串口,你如何做到能让多线程读写呢?这要求你写的代码能实现: 多线程可同时访问,但是取得结果是分时取得。 读写功能必须互斥。每...

使用VS的性能分析工具来分析代码的性能瓶颈问题(2) 内存使用率

勇哥注: 一般我们通过使用windows的任务管理器来分析软件的性能问题。 通过cpu占用率、cpu时间、线程数量、句柄数量几个关键参数来分析软件存在的内在泄露、 暴句柄、吃cpu等等问题。 这里我们来研究一下vs自带的性能分析工具,勇哥之前也没有接触过。 因此此篇我与大家共同学习。这一篇讲“内存使用率”工具。先提供一段存在内存泄露的代码。 private void button2_C...

使用VS的性能分析工具来分析代码的性能瓶颈问题(1) CPU采样

勇哥注: 一般我们通过使用windows的任务管理器来分析软件的性能问题。 通过cpu占用率、cpu时间、线程数量、句柄数量几个关键参数来分析软件存在的内在泄露、暴句柄、吃cpu等等问题。 这里我们来研究一下vs自带的性能分析工具,勇哥之前也没有接触过。因此此篇我与大家共同学习。(一)先看下怎么启用vs的性能分析工具。首先,调试菜单选择“性能探查器"。点击 之后会出现下面的界面。这...

C#中只使用Invokerequired来判断是不是UI线程可靠吗?

今天遇到一个C#的Crash,用windbg打开dump,加载sos之后一看,在4号线程出了一个System.InvalidOperationException,在这个地址上调用!pe。可以看到如下的异常信息:12345Exception object:Exception type: System.InvalidOperationExceptionMessage: The calling thre...

C# 勇哥关于winform.Show() ,winform.ShowDialog() 窗体卡死、显示阻塞、无法置顶问题的研究

勇哥注: 一个winform窗口,被Show()后是非模态窗口,被ShowDialog()是模态窗口,这个知识是无人不晓的。 但是,有些时候,会产生弹出窗口卡死、阻塞显示、无法置顶的诸多问题。 这一篇和勇哥一起研究一下这些现象。先来看下现象:下面的form是由Show()方法弹出来的。屏幕产生了阻塞显示的现象。看下任务管理器,提示这个弹出winform是“无响应”的。如果你此时去操作调用者的...
会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864