首页 文章 精选 留言 我的

精选列表

搜索[c ],共10000篇文章
优秀的个人博客,低调大师

再说J.U.C之线程池(一)

[TOC] 线程池的基础架构 Executor executor属于任务的执行者,这个接口只定义了执行任务的一个方法: public interface Executor { void execute(Runnable command); } ExecutorService 这个从名字我们也可以看到这个接口专门为Executor这个执行器来服务的里面有定义线程池的关闭,任务是否执行完毕等一些方法,具体就不这里详细说了。 AbstractExecutorService AbstractExecutorService属于对ExecutorService的抽象实现,我们可以通过看ThreadPoolService的源码来了解下这个抽象类 ThreadPoolExecutor 核心的线程池,我们后面专门详细说 Executors jdk给我们提供了生成线

优秀的个人博客,低调大师

C# StreamReader.ReadLine统计行数的问题

要实现一个功能: 从 lua 文件中提取字符串放到 excel 中,再将 excel 给海外同事,翻译完成后,用翻译的文本替换相应中文。 整个功能并不复杂,要点有二点: 1、提取字符串,一行中文如“我是中文…”,中间可能会遇到”我是中文\”xx\”我是中文”,如果用正则\”[^\”]+\”则会匹配失败,思路就是先将\”替换,查找成功后再将其替换回来,excel中有三列,分别是:key、中文、待翻译文本。 2、替换 lua 文件中的中文,先将 excel 读出来放到 Dictionary<string, string[]>对象中,然后逐行读取 lua 文件,拿到 key、中文,再从 Dictionary 中查找,满足条件后则进行替换。 以繁体为例 为了防止出现:新增了一个 key,或者某个 key 对应的中文有修改,所以在替换的时候有严格的检查。必须该行的 key、value,都存在于 excel 中,才替换相应的内容(仅一次)。 str9999="我是中文"--[["我是中文"]] 用string.Replace操作时,上面“我是中文”全部都被替换,不是所期望的。假设韩文或者越南文,我们肯定希望知道这个字符串所表示的含义,故特地将中文保留下来。new Regex().Replace 方法处理字符串嵌套比较麻烦,最后改为 string.Remove().Insert() 来处理。 讲到这里,基本都是在讲该功能的一些实现细节。在替换我提交SVN的时候,我就发现,明明该lua文件有3405行,但只显示3404行,最后一行是换行符,被干掉了。然后我查代码,发现没问题,被狗吃了? 如果最后一行改为字符串,如a,行数显示正常。 如果我额外加5行,显示结果是3409,说明加的5行都识别了,并没有对我添加的换行有特殊处理。 但最后一行换行就是不被读取。所以,我怀疑ReadLine方法压根就没读最后一行。查了一下官方文档,找到了答案: 将行定义为后面的字符后跟一条线序列︰ 换行符 ("\n")、 回车符 ("\r") 或回车符后跟一条线换行符 ("\r\n")。 返回的字符串不包含终止回车或换行。 返回的值是 null 如果到达了输入流的末尾。 所谓“终止”回车或换行,指的就是上面遇到的,文件最后一行是如果是换行\回车,它不会读取最后一行。 如果使用ReadLine对文件进行行数统计,需要注意最后一个终止回车/换行并不会被读取,不然得到的行数永远会少1

优秀的个人博客,低调大师

C#中已知enum值如何取出enum

enum TypeName { SystemString, SystemInt16, SystemInt32 } 现在有string typeName 里面存放 TypeName的枚举值,比如“SystemString” 现在要取出TypeName.SystemString: 使用Enum类的反射: (TypeName)typevalue = (TypeName)Enum.Parse( typeof (TypeName), typeName, true ); 为了事先验证typename是否是TypeName的值,代码优化为: 代码 本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2010/06/02/1750052.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

《C++必知必会》读书笔记2

在类X的非常量成员函数中,this指针的类型为 X *const .也就是说他是指向非常量X的常量指针。 但是在类X的常量成员函数中,this的类型为const X* const . 这就是常量成员函数和非常量成员函数的区别。 类的非静态数据成员可以被声明为mutable,这将容许她们的值可以被这个类的常量成员函数(也包括非常量成员函数)修改。 如果一个类声明了一个或者多个虚函数,那么编译器会为这个类的每一个对象插入一个指向虚函数表的指针。 如果使用了虚拟继承,对象将会通过嵌入的指针,偏移量或者其他非嵌入的信息来维持对其虚基类自对象位置的跟踪。因此,即使类没有声明虚函数,其中还是有坑被插入了一个虚函数表的指针。 对于一个类X来说,复制构造函数应该被声明为 X (const X &); 而复制赋值操作符应该被声明为X& operator=(const X&) 。 将一个函数的地址初始化或赋值给一个指向函数的指针的时候,无需显式的取得函数地址,编译器知道隐式的获取函数的地址,因此在这种情况下,&操作符是可选的。比如: void (*fp)(int ); extern void h(int); fp=h; //OK fp= &h; //OK 类似的,可以采用如下的方式调用函数: fp(12); 或者 (*fp)(12); 注意,和void * 指针可以指向任何类型的数据不同,不存在可以指向任何类型函数的通用指针。 还要注意,非静态成员函数的地址不是一个指针,因此不可以将一个函数指针指向一个非静态成员函数。 函数指针的一个传统用途是实现回调。 一个函数指针指向内联函数是合法的。但是如果通过函数指针调用内联函数将不会导致内联函数的调用,因为编译器通常无法在编译阶段确定将会调用什么函数。 ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/03/24/2416240.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

《C++必知必会》读书笔记3

指向数据成员的“指针”并非指针。 #include <iostream> using namespace std; class A{ public: A(){ //do nothing here. } A(int num,double num2){ this->num=num; this->num2=num2; } int num; double num2; }; int _tmain(int argc, _TCHAR* argv[]) { A* pA=new A(5,6); int A::* p=&A::num; //p是一个指针,指向A的一个int成员 double A::*p1=&A::num2; cout<<p<<endl; //输出偏移量 而不是地址 cout<<p1<<endl; //通过偏移量访问数据成员 cout<<pA->*p<<endl; cout<<pA->*p1<<endl; delete pA; return 0; } 指向成员函数的指针并非指针: #include <iostream> using namespace std; class A{ public: void function( int num); bool function1()const; virtual bool function2() const=0; }; class B:public A{ public : bool function2()const; }; int _tmain(int argc, _TCHAR* argv[]) { void (A::* p)(int)= &A::function; //不是地址,而是一个指向成员函数的指针 bool (A::* p1)()const =&A::function1; // 指向成员函数的指针可以指向一个常量成员函数 // B b; // A *a=&b; // (a->*p1)(); // (b.*p1)(); return 0; } ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/03/25/2416495.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册