C/C++/C#/dotnet
文章平均质量分 68
yunhaiC QQ654777694
这个作者很懒,什么都没留下…
展开
-
C#-WebRequest 超时不起作用
//WebRequest request = WebRequest.Create(uri); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); //request.Timeout = Timeout.Infinite; request.Timeout = 20000; //request.Al转载 2022-07-10 15:31:19 · 1797 阅读 · 0 评论 -
C# 并行运算方法简析
一、概述首先应该明白并行和并发的区别。并发就是有多个几乎同时到达的线程需要被处理,但只有有限个CPU,所以需要竞争上岗。并行指有多个CPU资源同时处理多个线程,不存在竞争的概念,可以大量节省运行时间。二、实现方法C#中目前有Tasks命名空间中的Parallel类来完成并行开发。2.1 ParallelParallel类有三个常见的方法:Invoke,For,Foreach,都可以实现多个方法的并行计算。For和ForEach方法多次调用同一个方法, Invoke可以同时调用不同的方法。2.12转载 2022-07-06 08:55:00 · 1804 阅读 · 0 评论 -
c#:互斥锁的使用
1. 互斥锁lock定义:private static readonly object m_objLock = new object(); 使用:lock (m_objLock){ // todo}作用:将会锁住代码块的内容,并阻止其他线程进入该代码块,直到该代码块运行完成,释放该锁。注意:定义的锁对象应该是:私有+静态+只读+引用类型的对象,这样可以防止外部改变锁对象。2. 互斥锁Monitor定义:private static readonly object m_objLock =转载 2022-06-17 10:18:42 · 320 阅读 · 0 评论 -
C#中Socket通讯(外网通讯,借助花生壳内网穿透)
下面是个简单的例子,实现客户端和服务器在外网情况下通讯建立通讯过程:1.下载花生壳,开通内网穿透功能(体验版6元),它会分配一个公网ip和一个端口号,如下图2.利用花生壳将存在服务器程序机器的内网映射至外网,如下图3.服务器启动程序,ip为内网,端口为花生壳分配的公网端口。4.客户端去连接公网ip,端口为公网端口C#测试代码如下:服务器:using System;using System.Collections.Generic;using System.Lin原创 2021-10-29 14:43:22 · 1539 阅读 · 1 评论 -
C#多线程和异步(二)——Task和async/await详解
阅读目录一、什么是异步 二、Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/ContinueWith) 4 Task的任务取消(CancellationTokenSource) 三、异步方法(async/await) 回到顶部一、什么是异步 同步和异步主要用于修饰方法。当一个方法被调用时,调用者需要等待该方法执行完毕...转载 2021-08-04 12:05:46 · 631 阅读 · 1 评论 -
通过广播获取ip地址的实现
引言在进行网络程序的设计时,有时候我们不想要手动指定接收方的ip尤其是在做聊天小程序的时候,因为这个时候对方的ip不是固定的,那么我们该怎么办呢?一个方法就是接收方创建一个socket监听一个端口,发送方通过广播的方式给所有局域网内的主机发送一个“hello”包,当然这个包是发往接收方监听的端口的,接收方接收到“hello”包后获取自己的ip地址然后封装在数据报里再发回给发送方,这样发送方就能获得局域网内所有在线的接收方的信息了!但这个过程有几个问题要考虑。第一点,如果接收方有多个网卡,我怎么知道“转载 2020-09-27 09:06:27 · 1780 阅读 · 0 评论 -
多线程下解决资源竞争的7种方法
前言 一般情况下,只要涉及到多线程编程,程序的复杂性就会显著上升,性能显著下降,BUG出现的概率大大提升。多线程编程本意是将一段程序并行运行,提升数据处理能力,但是由于大部分情况下都涉及到共有资源的竞争,所以修改资源对象时必须加锁处理。但是锁的实现有很多种方法,下面就来一起了解一下在C#语言中几种锁的实现与其性能表现。一、c#下的几种锁的运用方式1、临界区,通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 1 private st.原创 2020-08-12 09:07:20 · 1693 阅读 · 0 评论 -
MFC双缓冲绘图解决界面闪烁问题
一:为什么会产生界面闪烁?解释这个之前,我们需要明白的是在MFC里面绘图的消息响应机制,大概的就是如果我们要在某一个 东西上面绘图,比如对话框,单文档等等,就必须先得到图形DC的句柄(handle),然后在指定句柄的基础上进行图形操作,也就是MFC常用的CDC *DC = this->getDC();其中的this就是你想画图的目标。MFC里在消息响应的过程中,WM_PAINT被转变为OnDraw()(单文档 Single Document)或是OnPaint()(对 话框Dialog...原创 2020-06-06 09:34:26 · 834 阅读 · 0 评论 -
用C++和Windows的互斥对象(Mutex)来实现线程同步锁
//这是2个线程模拟卖火车票的小程序#include <windows.h>#include <iostream.h> DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread dataDWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data int index=0;int tickets=10;HANDLE hMutex;void main(){ HAN.转载 2020-06-01 13:59:28 · 331 阅读 · 0 评论 -
System.MissingMethodException: 未找到类型 **上的构造函数
在通过反射机制Activator.CreateInstance(Type),进行对象创建的过程中,**发生了“未找到类型“*”上的构造函数”**异常,最后发现是因为某些构造函数没有空构造函数所造成的。所以在通过CreateInstance创建对象时,注意要创建的类型是否具有空构造函数,如果没有需要使用**Activator.CreateInstance(Type, Object[])**方法增...转载 2020-03-20 16:47:14 · 2450 阅读 · 0 评论 -
A星寻路算法-Mind&Hand(C++)
目录1,建立模型,简化问题 2,A星算法原理与数据结构 2.1 Open和Closed列表 2.2 路径增量 2.3 A星算法原理 3,代码部分(C++)正文//注1:Mind & Hand,MIT校训,这里指的理解与实现(动脑也动手)//注2:博文分为两部分:(1)理解部分,为参考其他优秀博文的摘要梳理;(2)代码部分,是C++代码实现的,源码来源GitHu...转载 2020-03-04 10:35:45 · 819 阅读 · 0 评论 -
C#里面如何判断一个Object是否是某种类型
第一种方法var isA = oldObject.GetType() == typeof(Dictionary<string, string>)第二种方法var isB = oldObject.GetType().FullName.IndexOf("Dictionary") > 0;第三种var isC = oldObject is Dictionary...转载 2020-02-26 14:52:00 · 2824 阅读 · 0 评论 -
关于指针的一些知识
要说指针"地址",笔者认为必须从内存开始说起,也就是存储单元的地址,他是一种编号,相当于一排的座位,地址==座位编号. 但是要谈起"指针"可不像平时书上说的那样,指针==地址,这种说法已经被广大的C语言爱好者给抨击了,那指针相当于什么?可能你要这么问,形象的说指针就相当于一个箱子,箱子里面放了一个椅子,椅子的编号是地址,另外一种形象的假设:"就是一张纸,纸上写着比如说外语书在书架二层上,原创 2006-03-19 15:24:00 · 1178 阅读 · 0 评论 -
一个程序的演变
void main(){int m;printf("input number/n");scanf("%d",&m);s(m);printf("m=%d/n",m);}int s(int n){int i;for(i=n-1;i>=1;i--)n=n+i;printf("n=%d/n",n);}这个题目的答案是m=100,n=5050;■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■原创 2006-03-19 15:54:00 · 1102 阅读 · 0 评论 -
函数指针
函数指针其实是一个指针指向函数,相当于用一个指针变量来存储函数名的地址,一般形式是void (*p)(int)或者void (*p)(int x)这两种形式是一样的意思,不过习惯上用第一种.一个新知识最重要的是要知道怎么用,那我就讲一下这个指针函数应该怎么用吧!void m(int x); //这个地方是申明一个m的函数,也可以这样void m(int x);void (*p)(i原创 2006-03-23 22:05:00 · 1236 阅读 · 0 评论 -
2级C注意事项:都是些烦人的细节和抠门问题
从一个程序的头部开始1.#define宏定义,标识符要注意,括号问题注意2.这里有的程序可能会定义形参,关于函数调用,最后如果有ruturn语句也需要小心3.输入scanf语句,注意的是当一次输入多个数据时候的间隔符,该什么形式就是什么形式;4.中间还有逻辑运算符,&&还有||,这个主要是表达式短路问题. 自增自减需要理解,配合逻辑运算符号的时候结果就需要小心了!附值符号"=原创 2006-03-21 11:53:00 · 1237 阅读 · 0 评论 -
"函数值"引出的不小的问题
我举个例子吧xu(int a,int b){int temp; if(a>b) temp=a;a=b;b=temp;}main(){int m=4;int n=2;xu(m,n);printf("%d,%d",m,n);这个很明显是一个值传递,但是当我改了一些东西以后就不一样了请看:xu(int a,int b){int temp; i原创 2006-03-25 14:47:00 · 1072 阅读 · 0 评论 -
字符串,字符
别问那么复杂,今天问了半天才明白书上字符串定义是这样的:字符串是指若干有效字符的序列,其表示方法是用双引号将字符序列括起来,如:"string",字符串可以包括转义字符及ASCLL码表中的字符.在对字符串进行处理时,字符串存放在字符数组中. 那我就想问问,比如char c[]={"china"};他是用双引号引起来的, 那字符是什么?比如char c[]={china};这样算一个字原创 2006-03-26 16:34:00 · 1950 阅读 · 0 评论 -
2级C注意事项(2)
1.return语句后面只能返回一个值,可以是表达是或一个具体的值.有括号无括号都没关系.2.++,--,要特别注意,一个小语句的话要注意最后的值是他本身,在循环体内一定要注意他执行的次数3.逻辑运算符号,必须判断他的意思或者是执行的短路问题4.三种自右向左的结合运算符号,指针,自增减,三目运算5.输入函数中有其他东西原样输出,最后输出用分隔符号,没有的话必须用分隔符号6.除i原创 2006-03-29 18:27:00 · 1134 阅读 · 0 评论 -
C语言动态数组
int *a; int N; scanf("%d", &N); a = (int *) malloc(N * sizeof(int)); .... free(a); 这样就动态分配了数组a[N]。数组的长度N可输入确定,也可用程序中的变量确定。但要注意程序结束后要用free()将其释放,否则内存会泄漏。原创 2006-09-05 17:56:00 · 1586 阅读 · 0 评论 -
char的一些小细节
#include int main(void){char p=/065; printf("result: %c/n",p); return 0;}#include int main(void){char p=65; printf("result: %c/n",p); return 0;} #include int main(void){char p=65; printf("result原创 2006-09-17 16:49:00 · 1101 阅读 · 0 评论 -
some questions
Q. What int value means in exit(int) function?A: Return a value to OS, let OS know the exit state of your process.Only lowest 8 bits are used. Usually return 0 means no error. Otherwise, errorcode原创 2006-08-17 10:32:00 · 1277 阅读 · 0 评论 -
右左法则----复杂指针解析
The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you encounter parentheses, the direction should be reversed. Once everything in the转载 2006-12-25 13:32:00 · 1031 阅读 · 0 评论 -
C语言格式转换说明符以及修饰符的一些程序,帮助巩固
/*转换说明修饰符的几个小程序,其实这些修饰符无非就是+,-,#,0,*,整型数,浮点数*/#include #define PAGES 931int main(void){printf("*%d*/n",PAGES); printf("*%2d*/n",PAGES); printf("*%10d*/n",PAGES); //默认是右对齐 printf("*%-10d*/n",PAGES)原创 2008-03-10 17:05:00 · 3876 阅读 · 0 评论 -
setprecision()与setiosflags()
使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。 如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。 如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。set转载 2008-03-11 11:52:00 · 4821 阅读 · 1 评论 -
指针数组与数组指针
数组中每个元素都具有相同的数据类型,数组元素的类型就是数组的基类型。如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组称之为指针数组,它是指针的集合。 指针数组说明的形式为: 类型 * 数组名[常量表达式] 例如: int * pa[5]; 表示定义一个由5个指针变量构成的指针数组,数组中的每个数组元素--指针,都指向一个整数,其结构如图10-9所示。 注意"int转载 2007-12-28 07:50:00 · 6158 阅读 · 1 评论 -
输入输出缓冲区
scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了,这里还是要简单介绍一下.scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab键都认为是一个数据的结束,当然字符的话,一个字符就是结束了,回车,空格等都有对应的ascii码,所以用scanf输入字符时要小心这些东东被当成字符输进去,而输入字符串和整型,实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量转载 2008-04-08 14:06:00 · 2101 阅读 · 1 评论 -
C#中的析构函数
引言 在企业应用开发世界,性能,灵活性和安全性是最重要的。我作为一个VC++程序员开始我的职业生涯,并且在一个晴朗的早晨,我被转到了Web开发部。像每个C++程序员一样,我也很失落。我想每个像Tom,Dick甚至Harry能用HTML编程。然而,不久我就发现真正的挑战是生产高性能的,灵活的可靠的应用程序。综上所述,Web环境松耦合的,不分国界的本质将使你永远神往。 为了制作高性转载 2008-10-04 20:49:00 · 841 阅读 · 0 评论 -
asp.net学习步骤
如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET。 ASP.NET是一个全面向对象的技术,不懂OO,那绝对学不下去! 第二步 对.NET Framework类库有一定的了解 可以通过开发Windows Form应用程序来学习.NET Framework。A转载 2008-12-05 13:37:00 · 706 阅读 · 0 评论 -
Microsoft Visual Studio 2008编译MFC(WIN32)程序错误error C2664收藏
VC++6.0用户在使用VS2005编写WIN32或者MFC程序时,经常使用函数:MessageBox("提示信息。"),但是在VS2005编译时候出错,出错信息如:错误 1 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” d:/我的文档/visual studio 2005/projects/转载 2009-02-25 09:31:00 · 2510 阅读 · 2 评论 -
c#:抽象方法与虚方法之区别
虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢?1. 虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项 抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。如://抽象方法public abstract class Animal{ public abstract void Sleep(); public abstract void转载 2008-12-12 19:50:00 · 3651 阅读 · 0 评论 -
C#中ToString格式大全
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 2500转载 2009-03-10 16:10:00 · 1532 阅读 · 0 评论 -
c# OpenFileDialog
string resultFile = ""; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = "D://Patch"; openFileDialog1.Filter = "All files (转载 2009-03-11 17:03:00 · 14929 阅读 · 3 评论 -
C#写入文本文档
using System;using System.IO;// C:/Documents and Settings/Administrator/Local Settings/Application Data/Temporary Projects/test/bin/Release txt文档在这个目录下可以找到namespace yanghui{ class Program转载 2009-04-01 15:09:00 · 2120 阅读 · 0 评论 -
c#重点知识详解(六:线程)
如同java一样,在c#中写一个多线程应用是非常简单的,本章将介绍如何在c#种开发多线程程序。在.net中线程是由System.Threading 名字空间所定义的。所以你必须包含这个名字空间。 using System.Threading; 开始一个线程 System.Threading 名字空间的线程类描述了一个线程对象,通过使用类对象,你可以创建、删除、停止及恢复一个线程。创建一个新线程通过转载 2009-04-21 16:33:00 · 769 阅读 · 0 评论 -
C# 委托
什么是委托? 委托和事件这两个概念是完全配合的。委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数。 每一个委托都有自己的签名,例如:Delegate int SomeDelegate(string s, bool b);是一个委托申明,在这里,提及的签名,就是说SomeDelega原创 2009-04-21 17:15:00 · 700 阅读 · 0 评论 -
DllImport C#
经常在网上看一些代码,能看到很多像这样的代码[DllImport("user32.dll")].然后下面就是一些复杂的函数,有的看不懂.经查资料后才知道,原来这些代码是在调用外部函数,而user32.dll正是Win32 API的动态链接库.在网上查了一个很简单的调用API函数的例子,就是调用MessageBox函数.在使用DllImport前须加入命名空间using System.Runtime转载 2009-04-24 09:15:00 · 2948 阅读 · 0 评论 -
继承类时出现“不一致的存取范围” C#
问:在C#中,我自定义了一个类,当我继承这个类时,觉出现错误“不一致的存取范围:基底类别 class1 比类别 class2 存取范围低”,请问各位高手如何解决?先谢了 答:比如说,你的基类声明为private,而子类声明为public就会出现这个问题。 因为将子类对象cast成基类的时候就会出现类型访问的不一致。 把基类声明改成/加上publi转载 2009-04-30 09:18:00 · 3169 阅读 · 0 评论 -
C#窗体间通过ArrayList传值
C#窗体间通过ArrayList传值主窗体代码 // 保存数据的ArrayList private ArrayList listData; public Form1() { InitializeComponent(); // 初始化ArrayList listData转载 2009-05-26 20:26:00 · 2905 阅读 · 0 评论 -
winForm打开及关闭处理事件一览
Windows Form 中事件的顺序 对於需要轮流处理 Windows Form 应用程式中每个事件的开发人员来说,事件的引发顺序就十分重要。当某个状况呼叫严密的事件处理,如重新绘制表单的部分时,有必要了解事件在执行阶段时的明确引发顺序。本说明主题提供了有关事件顺序的详细资讯,这些事件是指在应用程式和控制项的存留期 (Lifetime) 几个重要阶段中的事件。如需滑鼠输入转载 2009-08-07 19:42:00 · 2601 阅读 · 0 评论