- 博客(351)
- 资源 (9)
- 收藏
- 关注
原创 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))
原因可能为:1.目录权限 2.操作频繁若是权限问题,按如下步骤:在运行里面输入: dcomcnfg 在“服务”里找到这三个服务,都去启动 Distributed Transaction Coordinator Remote Procedure Call (RPC) Security Accounts Manager 如果:Distribu
2016-12-21 09:22:50 38533 9
原创 网络编程(42)—— windows平台下创建线程的四种方法(一)
一、引言 接下来,笔者主要谈下Windows平台下多线程的用法。首先,要强调一点,Windows平台的线程linux中的线程不同,它会伴着主函数的结束而销毁。Windows平台下可用的创建多线程的API共有四个,分别是:(1) CreateThread() CreateThread是Windows的API函数,提供操作系统级别的创建线程的操作,且仅限于工作者线
2016-12-21 08:11:28 1850
原创 网络编程(41)—— Linux线程销毁的两种方法
Linux的线程的创建必然会伴随着内存空间的分配,而当线程函数执行完毕时,线程空间同样也不会被自动收回。特别是,Linux线程的销毁和进程也不一样,即使主函数结束,如果不主动回收,线程空间也不会被释放。类似于永远不能被回收的僵尸进程,我们姑且叫这种线程为僵尸线程吧。本文就是介绍回收这种僵尸线程的资源的两种方法。方法一:利用pthread_join()函数。 这个函数在
2016-12-19 12:52:02 6475 1
原创 Win32 SDK基础(9)—— Windows 常用消息大全
一、Windows消息分布消息范围说 明0 ~ WM_USER – 1系统消息WM_USER ~ 0x7FFF自定义窗口类整数消息WM_APP ~ 0xBFFF应用程序自定义消息0xC000 ~
2016-12-18 19:09:44 1902
原创 Win32 SDK基础(8)—— Windows消息机制
一、 什么是消息 在解释什么是消息之前,我们先讨论一下程序的执行机制问题。大体上说,程序按照执行机制可以分为两类:第一类是过程驱动。比如我们最早接触编程时写的C程序,又或者单片机程序。这类程序往往预先已经设定好了执行流程,我们执行时只是按部就班的执行;第二类是事件驱动。事件,相信大家都能够理解。每个事件的发生都是随机的,每个事件都会有发生的时刻,类似生活中的事件。程序中的
2016-12-18 19:02:40 1712 2
原创 网络编程(40)—— 使用信号量semaphore进行多进程间的同步
本文主要介绍下在多进程中使用信号量semaphore的方法。在上一文中,我们已经知道semaphore和mutex对临界区访问控制的一个最主要区别就是semaphore可以跨进程使用,而mutex只能在一个进程中使用。我们再来看下sem_init的原型,熟悉决定进程共享或者线程共享的方法:#include int sem_init(sem_t *sem, int pshared, unsig
2016-12-18 14:20:40 7305 5
原创 网络编程(39)—— 使用信号量semaphore进行多线程同步
一、Semaphore相关函数 之前介绍过了多线程中利用互斥mutex控制多线程中对临界区的访问方法,本文主要介绍下利用信号量semaphore控制线程对临界区的访问。首先,我们先看一下semaphore相关的函数:1.1 头文件#include 与之前互斥mutex所引用的头文件pthread.h不同,semaphore的相关函数在semaphore.
2016-12-17 11:26:56 1943
原创 网络编程(38)—— 利用互斥mutex控制多线程对临界区的访问
解决多线程访问临界区的冲突问题,最常用的方法就是利用互斥量mutex了。linux中互斥的使用分为以下步骤:1、定义互斥量。pthread_mutex_t mutex; 互斥量的本质其实就是一个结构体,请参照/usr/include/bits/pthreadtypes.h中对pthread_mutex_t的定义:typedef union{ struct _
2016-12-16 08:43:37 1570
原创 用flask开发个人博客(23)—— flask中的数据模型关系
一、一对一关系 一个人和身份证之间的关系,一个人只有一个身份证,一个身份证也只有被一个人拥有。class Identification(db.Model): """ 身份证 """ __tablename__='idents' id=db.Column(db.Integer,primary_key=True) address=d
2016-12-15 22:59:02 4738
原创 网络编程(37)—— 线程访问的临界区是怎么形成的
本文主要讨论多线程访问中临界区形成的问题,从本质上讲,临界区的形成是在多线程中,不同的线程访问和操作同一片内存,而形成的。在具体分析之前,我们先来看一个多线程的列子:#include#includeint num=0;void* pthread_main1(){ int i=0; for(i=0;i<1000000000;i++) { num+
2016-12-15 08:58:23 1252
原创 网络编程(36)—— 线程安全函数和非线程安全函数
今天研究下线程安全函数和非线程安全函数。什么是线程安全函数?我们知道在多线程编程中,线程安全问题是不容忽视的。只要存在多线程,就会存在多个线程访问同一段代码或者同一个全局变量的临界区,对于uc中标准函数也是一样(类似于windows中的原子函数)。当多个线程同时调用一个标准函数时,执行同一段代码,同样会在函数内部形成临界区,就可能出现问题。 线程安全函数就是针对上述问题,在函数内
2016-12-14 08:40:23 2844
原创 【Python错误】No module named py
导入文件里的内容是:from test import User不是:from test.py import User 幼稚的错误。。。。。。。。。。。。。。。
2016-12-13 22:14:04 11336
原创 网络编程(35)—— 利用pthread_join函数等待线程结束并获取线程函数返回值
在linux中的多线程一节中,我们介绍了利用pthread_create()函数创建子线程的方法。这种方式创建的线程存在一个问题:在主线程创建完成子线程后,若子线程函数还没结束时,但是此时主线程函数已经结束,那么子线程也会被强制销毁,为了避免这个问题,当时我们在主线程中sleep了11秒钟以等待子线程的结束。虽然暂时避免了问题的发生,但是显然这不是很友好的解决方案,因为在实际编程中你无法预料子
2016-12-13 09:30:05 6927
原创 网络编程(34)—— linux中的多线程
本文主要研究下linux中多线程的用法。 在之前的几篇文章中,介绍过Linux中多进程的实现,现在我们开始研究下linux中的多线程。之前曾经实现过多进程的linux服务器,解决了多客户端连接时的效率问题,但是它还存在以下问题:1、创建子进程时,需要完全复制父进程的内存,造成很大的性能开销。2、由于各个进程之间不属于同一片内存,进程间通信需要特殊的IPC技术3、CPU
2016-12-12 08:49:20 739
原创 Win32 SDK基础(7)—— 怎样创建一个窗口的子窗口
什么是子窗口?当我们在点击Windows窗口的某个按钮时,比如点击窗口的关闭按钮,往往会弹出一个窗口来提示相关信息,类似这种弹出窗口就是主窗口的子窗口。我们创建子窗口时,也是使用CreateWindow或者CreateWindowEx API。 我们来看下CreateWindow的函数原型:HWND WINAPI CreateWindow(_In_opt_ LPCTSTR
2016-12-11 21:29:19 12969 3
原创 Win32 SDK基础(6)—— 窗口类的查找过程和相关API
一、窗口类的查找过程 上一文中,我们介绍了windows系统三种窗口类——系统窗口类、全局窗口类和局部窗口类。每种窗口类在操作系统中的作用域不同,而且每个作用域内注册的窗口类名称是不能重复的。而创建窗口时往往会在系统、全局、局部范围按照窗口类名称进行寻找,寻找过程总结如下:(1)操作系统根据传入的窗口类名称,现在局部窗口类中进行查找,如果找到执行第2步,如果未找到执行第3步。(2
2016-12-11 19:52:46 2545
原创 用flask开发个人博客(17)—— Flash消息
当我们登录摸一个网站时,输入用户名和密码,如果密码输入错误,点击确定按钮后经常会出现一条提示密码错误的消息。这个消息就是flash消息,主要用来提示用户当前操作的结果。flask中也有自己的flash消息,本文主要介绍flask中flash消息的用法。 首先,我们要先编写用户显示flash消息的html文件,为了简单演示,我们直接把放到html中,不再添加其他效果。flask开放了
2016-12-11 08:50:57 7516
原创 在Windows7 系统上部署DNS服务器
本文主要介绍在WIN7上利用ntbind部署DNS服务器的方法。ntbind是Win7的Windows版本,下载地址:http://ftp.isc.org/isc/bind9/9.11.0rc3/。需要下载BIND9.11.0rc3.debug.x64.zip,建议下载9.11以上的版本,老版本可以不支持Win7,下载时注意区分操作系统的位数。 下载完成后,解压文件,点击BIND
2016-12-10 21:23:51 26111 8
原创 用flask开发个人博客(15)—— flask中四种请求钩子
一 引言 flask中具有四种钩子被做成了修饰器,我们在后端可以进行调用做相关的操作.使用钩子函数时,我们需要借助flask的全局变量g.g作为中间变量,在钩子函数和视图函数中间传递数据.我们先引入全局变量gfrom flask import g 然后注册一个视图函数,用来显示g中的数据@app.route('/test')def t
2016-12-10 16:12:32 10016
原创 用flask开发个人博客(7)—— flask中设置和获取cookie
一 什么是cookie 什么是cookie?如果单单从数据结构的角度来说,它可以被理解成用来保存数据的一个dictionary,由一组组键值对组成.如果从作用上来说,我们知道Http协议是一种无状态的协议.什么叫无状态呢,就是本次的客户端请求不会保留上一次客户端请求的状态,简单点说就是这样会要求我们每次在浏览器中点开一个网站的链接都会输一次账户和密码.cookie就是用来解决
2016-12-10 08:50:14 24422 1
原创 网络编程(33)—— 使用AF_UNIX构建本地通信的socket服务端和客户端
之前一直使用AF_INET构造socket服务端和客户端,本文介绍下使用AF_UNIX构建本地通信的socket服务端和客户端。我们先列出代码,然后在对代码进行分析:服务端:#include#include#include#include<sys/socket.h#include#include//头文件发生了变化#define BUF_SIZE 1024 void e
2016-12-09 08:12:36 3162
原创 网络编程(32)—— linux中销毁僵尸进程的四种方法
一、wait函数函数原型:pid_t wait(int *status);描述:wait可以回收任意一个僵尸进程,只要系统中存在僵尸进程,调用一次wait,就会回收一个僵尸进程。参数说明: status - 当子进程结束之后,其进入僵尸进程状态。其状态变化信息被操作系统放置在内存中某一处位置,而status就是这处位置的指针,通过调用wait函数可以获取这部分位置
2016-12-08 08:03:15 3803
原创 用flask开发个人博客(4)—— flask中4种全局变量
一 current_app current_app代表当前的flask程序实例,使用时需要flask的程序上下文激活,我们以本专栏第一篇文章中写的test.py为例介绍下它的用法:1.1 激活程序上下文>>> from test import app>>> from flask import current_app>>> from flask import g
2016-12-08 00:28:43 30982 2
原创 网络编程(29)—— socket的close函数以及shutdown函数在多进程服务器中的不同表现(二)
本文紧接着上一遍文章《socket的close函数以及shutdown函数在多进程服务器中的不同表现(一)》,来验证上文中提到的几个结论:1、 复制后的socket描述符真的指向同一个socket吗? 为了验证这个问题,我们先创建一个socket,然后复制一份改socket描述符的副本,再分别打印这两个socket描述符,若描述符打印结果一致,说明指向同一个socket。int
2016-12-07 00:21:37 1263
原创 网络编程(28)—— socket的close函数以及shutdown函数在多进程服务器中的不同表现(一)
这几天遇到了一个很奇怪的问题,编写了一个读写IO分离的多进程socket客户端,主要功能是在成功connect服务端后,fork一个子进程,在子进程中不断的提示用户输入字符串(输入Q或者q会退出程序),然后发给服务端。然后再父进程中不断的读,读取从客户端发送过来的数据。代码如下:#include#include#include#include#include#include#inc
2016-12-06 20:35:26 1735
原创 【C#语法】详解C#中的反射(Assembly)机制
一 引言 反射机制是C#中比较有特色的一种技术。它使我们编程时可以更加灵活,能够通过类或者方法名称能够很方便的构造类和调用方法,虽然有一些微不足道的性能损失。我们先来看一下反射的定义: 反射的定义:审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Re
2016-12-05 15:12:14 8737
原创 Win32 SDK基础(5)—— 漫谈窗口类
一、引言 在上一文中,我们从零开始创建了一个窗口。其中很重要的一个步骤,就是注册窗口类,如下面的代码://注册窗口类BOOL Register(LPSTR lpClassName, WNDPROC wndProc){ WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof(wce); wce.cbClsExtra =
2016-12-04 18:00:46 2815
原创 Win32 SDK基础(4)—— 从零开始创建windows窗口(二)
3.5 显示窗口。 创建了窗口之后,如果要想运行时能够看见窗口,我们还需要显式的设置显示窗口:ShowWindow(hWnd, SW_SHOW);UpdateWindow(hWnd); ShowWindow和UpdateWindow都是系统的API,前者是设置窗口的显示属性。后者重新更新窗口属性,只有更新之后,属性才会生效。经过了上述步骤,我们的WinMain
2016-12-04 11:39:13 4147
原创 Win32 SDK基础(3)—— 从零开始创建windows窗口(一)
一、从Windows的程序分类说起。 从高中第一次接触电脑开始(惭愧,高中才会用电脑,大学一年级才知道有QQ这么个东西,家里穷,没办法),在我的概念中电脑应该就是windows这样的。所以,直到大学临毕业,才知道原来还有linux这种操作系统,然后毕业之后开始工作才明白苹果公司也有一套自己的操作系统。所以,至今也想不明白,我怎么就踏上了码农这条不归路。然后一踏上就一发不可收拾,直到某天被
2016-12-03 21:24:30 17402 2
原创 【Python语法】Python中为自定义类编写help文档以及进行文档测试
一 以注释方式为类添加帮助文档 我们知道,Python中可以使用help('模块名')或者help(类名)的形式来查看一个模块或者类的帮助文档,我们也可以为自定义的类添加帮助文档,并用help进行查看.Python中用三对双引号可以进行多行注释,当我们把这种注释内容放到一个类或者函数定义的下面时,它会自动被当作该类或者函数的帮助文档.请看下面的类:docts.py:#co
2016-12-03 17:10:09 8806 1
原创 【Python错误】 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)
原因:Python的str默认是ascii编码,和unicode编码冲突.解决方案:import sysreload(sys)sys.setdefaultencoding('utf8')
2016-12-03 13:49:16 10449
原创 画线算法-Bresenham算法
Bresenhan算法将坐标系分割成棋盘形状,每个像素占有一个棋格,当我们进行采样时(直线斜率小于1),如下图所示,假设给定绘图的起始点为(10,11),那么绘制下一个采样点的坐标必然是从(11,11)和(11,12)中选择一个。如果把这种情况一般化,对于绘制直线的起始点是(Xk,Yk),那么其下一个采样点必然是(Xk+1,Yk)或者(Xk+1,Yk+1)中的一个。
2016-12-02 11:22:45 10462 9
原创 画线算法-数字微分分析仪(DDA)算法
DDA算法的本质就是在绘制直线时,根据直线的斜率采样不同的像素点,如果斜率小于1,在x轴以单位1递进采样像素点;如果斜率大于1,在y轴以单位1递进采样像素点。y2=mx2+by1=mx1+by2-y1=m(x2-x1)1、当m的绝对值小于等于1,采样时x2-x1=1,y2=y1+m,注意m是有符号的2、当m的绝对值大于1,采样时y2-y1=1,x2=1/m+x1,注意m
2016-12-01 09:46:05 1644
原创 C#中操作Excel(6)—— 操作Excel的两种技术(二)--OLEDB技术
三、使用OLEDB技术操作Excel 上文介绍了使用COM技术读写Excel的方法,接下来我们介绍下使用OLEDB技术读写Excel。3.1 使用OLEDB读取Excel文件。 要读取文件我们第一步要建立一个数据库连接字符串,连接指向我们的D: \\Test.xlsx文件。bool hasTitle = false;string path="D:\\T
2016-11-24 09:45:21 2328
原创 C#中操作Excel(5)—— 操作Excel的两种技术(一)--COM技术
一、引言 本文主要介绍操作Excel的两种技术,第一种就是我们之前的文章中一直在使用的COM技术,而另一种是使用OLEDB技术。两种方法各有优势和缺点,前者利用COM接口操作Excel,更加自由和灵活,可以自由的设置单元格格式等等,但是数据量较大时存在性能瓶颈。后者把Excel当成一个数据库,读取速度较快,但是无法设置Excel的格式。下面分别介绍两种技术,在此之前我们先布置试验
2016-11-24 08:52:40 2702
原创 【Python错误】AttributeError: 'bool' object has no attribute '__call__'
使用flask布置web时,current_user.is_authenticated()出现错误: AttributeError: 'bool' object has no attribute '__call__'解决方法: flask-login的版本问题,flask-login2.x是current_user.is_authenticated(),fl
2016-11-19 23:24:28 21095
原创 C#中操作Excel(4)—— 向Excel中插入两种图表以及设置图表格式
引言 本文主要讨论下向Excel中插入图表的两种方式。在Excel中图表是有两种级别的,一种是和sheet同级别的图表,也就是说整个excel的标签页就是一个图表;还有一种就是我们最常使用的在一个sheet中插入的图表,我们姑且叫它sheet子图表。这种图标在原则上可以插入N个。本文就这两种图表,分别介绍其插入的方法。插入sheet级别的图表 这种级
2016-11-18 11:41:17 14769 3
mock框架插件 mod.dll
2018-09-29
Win7 64位安装DNS root.zone等配置文件
2016-12-10
MICROSOFT SILVERLIGHT 4从入门到精通
2016-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人