- 博客(48)
- 资源 (9)
- 收藏
- 关注
原创 网络编程(50)—— 使用poll搭建回声服务端
一、 引言 本文主要介绍在linux中使用poll搭建回射服务端。我们在前面的文章中研究了使用select和epoll搭建服务端的方法。poll的用法和select类似,只不过用来描述操作符集合的是pollfd而非select的fd_set。Poll在Linux 2.5.44版本后被epoll取代,本文只为研究其用法。二、函数原型poll的函数原型如下:#includ
2016-12-31 12:14:53 1338
原创 错误处理(三)—— 剪贴板为空。 (异常来自......)
异常类型:System.Runtime.InteropServices.COMException ErrorCode = -2146823683 这种错误在Excel和Word之间进行复制和粘贴操作时经常出现,主要原因就是操作剪贴板过于频繁,导致里面的内容很多剪贴板响应不过来。解决方法是在每次复制之前先清空剪贴板即可:System.Windows.Form
2016-12-30 17:25:24 10259
原创 网络编程(49)—— epoll的条件触发和边缘触发
一、条件触发和边缘触发 在《网络编程(21)—— 使用epoll进行IO复用》一文中,我们介绍了在linux平台下使用epoll进行IO复用的方法。本文主要介绍epoll中进行IO复用的两种触发方式:条件触发和边缘触发。1.1 什么是条件触发和边缘触发? epoll进行IO复用的基本原理我们可以概括如下:1、 使用epoll_create()创建用来保存e
2016-12-30 17:15:42 3461 3
原创 网络编程(48)—— windows平台下的四种线程同步技术(二)
四、内核同步对象—— 互斥(Mutex) 内核线程同步对象包括互斥、信号量和事件,它们使用时存在很多共通之处。下面先介绍在Windows平台利用互斥进行线程的同步。HANDLE WINAPI CreateMutex(__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,__in BOOL bInitialOwner,__in_
2016-12-29 08:16:46 1098
原创 网络编程(47)—— windows平台下的四种线程同步技术(一)
一、用户模式和内核模式 Windows操作系统在运行时,存在以下两种模式:用户模式:是运行应用程序的基本模式,不能访问硬件,且访问的内存的范围也有限制。内核模式:是操作系统运行的基本模式,可以访问硬件,访问的内存范围无限制。 Windows的程序在运行时,往往频繁的在用户模式和内核模式之间切换。以多线程程序为例,我们所创建的线程属于操作系统,在创建线
2016-12-28 09:01:31 1466
原创 网络编程(46)—— windows内核对象的两种状态
一、 什么是内核对象? 我们知道进程、线程、文件、互斥、信号量这些都是操作系统级别的资源。我们在使用这些资源时,实际上都是由操作系统进行创建和管理的。操作系统为了管理这些资源,会在其内部创建一个数据块,也可以理解为一个结构体对象。这个数据块就是内核对象。二、 内核对象有哪两种状态? 内核对象的状态共有两种:signaled(有信号)状态和non-sign
2016-12-27 08:52:05 1823
转载 网络编程(45)—— windows平台下销毁线程的四种方法
原文出自:http://www.cnblogs.com/goalone1985/articles/2126420.html终止线程运行 若要终止线程的运行,可以使用下面的方法: • 线程函数返回(最好使用这种方法)。 • 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。 • 同一个进程或另一个进程中的线程调用 TerminateThre
2016-12-26 08:46:42 2475
原创 Win32 SDK基础(10)—— 几种常见的Windows消息处理
一 引言 本文主要介绍几种Windows常见的消息的处理,在《Win32 SDK基础(8)—— Windows消息机制》中,我们介绍了WM_CREATE消息的处理,在窗口创建之前,我们利用消息处理函数弹出了一个MessageBox,本文在此基础之上,介绍WM_DESTROY、WM_SYSCOMMAND、WM_QUIT、WM_SIZE等其它常见的Windows消息。首先,我们引入在
2016-12-25 23:35:24 3672
原创 用flask开发个人博客(30)—— 用WerkZeug实现密码的加密存储
一 引言 我们在进行用户的注册时,往往需要将用户输入的明文密码加密成密文进行存储。flask中使用WerkZeug模块可实现这一功能。WerkZeug中有两个方法:generate_password_hash(password)和check_password_hash(hash,password)。前者用来将明文密码加密,返回加密后的密文,用来进行用户注册。后者将明文和密文进
2016-12-24 12:22:08 3445
原创 网络编程(44)—— windows平台下创建线程的四种方法(三) 工作者线程和CWinThread线程类管理
四、AfxBeginThread4.2 工作者线程 工作者线程类似我们之前介绍的用CreateThread创建的线程,它在后台处理数据,和主界面线程共享消息循环。它用AfxBeginThread的重载版本创建,函数原型如下:CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pPar
2016-12-23 08:37:51 4346
原创 网络编程(43)—— windows平台下创建线程的四种方法(二)之用户界面线程
四、AfxBeginThread 在介绍使用AfxBeginThread进行多线程编程之前,我们先介绍下MFC中两种线程的概念,这也是在MFC编程中无法绕过的两种类型的线程 —— 用户界面线程和工作者线程。4.1 用户界面线程 用户界面线程,顾名思义,它是一种可以管理UI界面的线程。它含有自己的消息循环,可以处理UI界面的各种消息。最常见的用户界面线程,就是
2016-12-22 08:47:57 1560
原创 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 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 38691 9
原创 网络编程(42)—— windows平台下创建线程的四种方法(一)
一、引言 接下来,笔者主要谈下Windows平台下多线程的用法。首先,要强调一点,Windows平台的线程linux中的线程不同,它会伴着主函数的结束而销毁。Windows平台下可用的创建多线程的API共有四个,分别是:(1) CreateThread() CreateThread是Windows的API函数,提供操作系统级别的创建线程的操作,且仅限于工作者线
2016-12-21 08:11:28 1858
原创 网络编程(41)—— Linux线程销毁的两种方法
Linux的线程的创建必然会伴随着内存空间的分配,而当线程函数执行完毕时,线程空间同样也不会被自动收回。特别是,Linux线程的销毁和进程也不一样,即使主函数结束,如果不主动回收,线程空间也不会被释放。类似于永远不能被回收的僵尸进程,我们姑且叫这种线程为僵尸线程吧。本文就是介绍回收这种僵尸线程的资源的两种方法。方法一:利用pthread_join()函数。 这个函数在
2016-12-19 12:52:02 6495 1
原创 Win32 SDK基础(9)—— Windows 常用消息大全
一、Windows消息分布消息范围说 明0 ~ WM_USER – 1系统消息WM_USER ~ 0x7FFF自定义窗口类整数消息WM_APP ~ 0xBFFF应用程序自定义消息0xC000 ~
2016-12-18 19:09:44 1912
原创 Win32 SDK基础(8)—— Windows消息机制
一、 什么是消息 在解释什么是消息之前,我们先讨论一下程序的执行机制问题。大体上说,程序按照执行机制可以分为两类:第一类是过程驱动。比如我们最早接触编程时写的C程序,又或者单片机程序。这类程序往往预先已经设定好了执行流程,我们执行时只是按部就班的执行;第二类是事件驱动。事件,相信大家都能够理解。每个事件的发生都是随机的,每个事件都会有发生的时刻,类似生活中的事件。程序中的
2016-12-18 19:02:40 1730 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 7330 5
原创 网络编程(39)—— 使用信号量semaphore进行多线程同步
一、Semaphore相关函数 之前介绍过了多线程中利用互斥mutex控制多线程中对临界区的访问方法,本文主要介绍下利用信号量semaphore控制线程对临界区的访问。首先,我们先看一下semaphore相关的函数:1.1 头文件#include 与之前互斥mutex所引用的头文件pthread.h不同,semaphore的相关函数在semaphore.
2016-12-17 11:26:56 1959
原创 网络编程(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 1582
原创 用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 4744
原创 网络编程(37)—— 线程访问的临界区是怎么形成的
本文主要讨论多线程访问中临界区形成的问题,从本质上讲,临界区的形成是在多线程中,不同的线程访问和操作同一片内存,而形成的。在具体分析之前,我们先来看一个多线程的列子:#include#includeint num=0;void* pthread_main1(){ int i=0; for(i=0;i<1000000000;i++) { num+
2016-12-15 08:58:23 1262
原创 网络编程(36)—— 线程安全函数和非线程安全函数
今天研究下线程安全函数和非线程安全函数。什么是线程安全函数?我们知道在多线程编程中,线程安全问题是不容忽视的。只要存在多线程,就会存在多个线程访问同一段代码或者同一个全局变量的临界区,对于uc中标准函数也是一样(类似于windows中的原子函数)。当多个线程同时调用一个标准函数时,执行同一段代码,同样会在函数内部形成临界区,就可能出现问题。 线程安全函数就是针对上述问题,在函数内
2016-12-14 08:40:23 2861
原创 【Python错误】No module named py
导入文件里的内容是:from test import User不是:from test.py import User 幼稚的错误。。。。。。。。。。。。。。。
2016-12-13 22:14:04 11353
原创 网络编程(35)—— 利用pthread_join函数等待线程结束并获取线程函数返回值
在linux中的多线程一节中,我们介绍了利用pthread_create()函数创建子线程的方法。这种方式创建的线程存在一个问题:在主线程创建完成子线程后,若子线程函数还没结束时,但是此时主线程函数已经结束,那么子线程也会被强制销毁,为了避免这个问题,当时我们在主线程中sleep了11秒钟以等待子线程的结束。虽然暂时避免了问题的发生,但是显然这不是很友好的解决方案,因为在实际编程中你无法预料子
2016-12-13 09:30:05 6937
原创 网络编程(34)—— linux中的多线程
本文主要研究下linux中多线程的用法。 在之前的几篇文章中,介绍过Linux中多进程的实现,现在我们开始研究下linux中的多线程。之前曾经实现过多进程的linux服务器,解决了多客户端连接时的效率问题,但是它还存在以下问题:1、创建子进程时,需要完全复制父进程的内存,造成很大的性能开销。2、由于各个进程之间不属于同一片内存,进程间通信需要特殊的IPC技术3、CPU
2016-12-12 08:49:20 745
原创 Win32 SDK基础(7)—— 怎样创建一个窗口的子窗口
什么是子窗口?当我们在点击Windows窗口的某个按钮时,比如点击窗口的关闭按钮,往往会弹出一个窗口来提示相关信息,类似这种弹出窗口就是主窗口的子窗口。我们创建子窗口时,也是使用CreateWindow或者CreateWindowEx API。 我们来看下CreateWindow的函数原型:HWND WINAPI CreateWindow(_In_opt_ LPCTSTR
2016-12-11 21:29:19 13021 3
原创 Win32 SDK基础(6)—— 窗口类的查找过程和相关API
一、窗口类的查找过程 上一文中,我们介绍了windows系统三种窗口类——系统窗口类、全局窗口类和局部窗口类。每种窗口类在操作系统中的作用域不同,而且每个作用域内注册的窗口类名称是不能重复的。而创建窗口时往往会在系统、全局、局部范围按照窗口类名称进行寻找,寻找过程总结如下:(1)操作系统根据传入的窗口类名称,现在局部窗口类中进行查找,如果找到执行第2步,如果未找到执行第3步。(2
2016-12-11 19:52:46 2561
原创 用flask开发个人博客(17)—— Flash消息
当我们登录摸一个网站时,输入用户名和密码,如果密码输入错误,点击确定按钮后经常会出现一条提示密码错误的消息。这个消息就是flash消息,主要用来提示用户当前操作的结果。flask中也有自己的flash消息,本文主要介绍flask中flash消息的用法。 首先,我们要先编写用户显示flash消息的html文件,为了简单演示,我们直接把放到html中,不再添加其他效果。flask开放了
2016-12-11 08:50:57 7534
原创 在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 26197 8
原创 用flask开发个人博客(15)—— flask中四种请求钩子
一 引言 flask中具有四种钩子被做成了修饰器,我们在后端可以进行调用做相关的操作.使用钩子函数时,我们需要借助flask的全局变量g.g作为中间变量,在钩子函数和视图函数中间传递数据.我们先引入全局变量gfrom flask import g 然后注册一个视图函数,用来显示g中的数据@app.route('/test')def t
2016-12-10 16:12:32 10024
原创 用flask开发个人博客(7)—— flask中设置和获取cookie
一 什么是cookie 什么是cookie?如果单单从数据结构的角度来说,它可以被理解成用来保存数据的一个dictionary,由一组组键值对组成.如果从作用上来说,我们知道Http协议是一种无状态的协议.什么叫无状态呢,就是本次的客户端请求不会保留上一次客户端请求的状态,简单点说就是这样会要求我们每次在浏览器中点开一个网站的链接都会输一次账户和密码.cookie就是用来解决
2016-12-10 08:50:14 24436 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 3192
原创 网络编程(32)—— linux中销毁僵尸进程的四种方法
一、wait函数函数原型:pid_t wait(int *status);描述:wait可以回收任意一个僵尸进程,只要系统中存在僵尸进程,调用一次wait,就会回收一个僵尸进程。参数说明: status - 当子进程结束之后,其进入僵尸进程状态。其状态变化信息被操作系统放置在内存中某一处位置,而status就是这处位置的指针,通过调用wait函数可以获取这部分位置
2016-12-08 08:03:15 3811
原创 用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 31016 2
原创 网络编程(29)—— socket的close函数以及shutdown函数在多进程服务器中的不同表现(二)
本文紧接着上一遍文章《socket的close函数以及shutdown函数在多进程服务器中的不同表现(一)》,来验证上文中提到的几个结论:1、 复制后的socket描述符真的指向同一个socket吗? 为了验证这个问题,我们先创建一个socket,然后复制一份改socket描述符的副本,再分别打印这两个socket描述符,若描述符打印结果一致,说明指向同一个socket。int
2016-12-07 00:21:37 1271
原创 网络编程(28)—— socket的close函数以及shutdown函数在多进程服务器中的不同表现(一)
这几天遇到了一个很奇怪的问题,编写了一个读写IO分离的多进程socket客户端,主要功能是在成功connect服务端后,fork一个子进程,在子进程中不断的提示用户输入字符串(输入Q或者q会退出程序),然后发给服务端。然后再父进程中不断的读,读取从客户端发送过来的数据。代码如下:#include#include#include#include#include#include#inc
2016-12-06 20:35:26 1752
原创 【C#语法】详解C#中的反射(Assembly)机制
一 引言 反射机制是C#中比较有特色的一种技术。它使我们编程时可以更加灵活,能够通过类或者方法名称能够很方便的构造类和调用方法,虽然有一些微不足道的性能损失。我们先来看一下反射的定义: 反射的定义:审查元数据并收集关於它的类型信息的能力,元数据(编辑后的基本数据单元)就是一大堆表,编译器会创建一个类定义表,一个字段定义表,一个方法定义表等,System.Re
2016-12-05 15:12:14 8763
mock框架插件 mod.dll
2018-09-29
Win7 64位安装DNS root.zone等配置文件
2016-12-10
MICROSOFT SILVERLIGHT 4从入门到精通
2016-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人