- 博客(21)
- 收藏
- 关注
原创 子程序Pid得到父进程Pid
从所周知,在Windows NT/2000系统的API黑洞之一便是NTDLL.DLL,此DLL包含了许多未公开的API函数。本文将列举一、二,并以如何获取任何指定进程的父进程ID为例作为示范。NTDLL.DLL中有一个函数叫NtQueryInformationProcess,用它可以将指定类型的进程信息拷贝到某个缓冲。其原型如下:NTSYSAPINTSTATUSNTAPINtQueryInformationProcess (IN HANDLE ProcessHandle, // 进程句柄IN
2021-03-30 13:58:01
975
1
原创 C++ KMP代码的具体实现。
KMP算法C++代码的实现。#include <iostream>#include <string>#include <windows.h>#include <vector>using namespace std;//朴素法找字串int Index(string S, string T){ int i = 0, j = 0; while (i <S.length() && j < T.length())
2021-01-04 14:24:16
236
2
原创 C11标准(auto a:b)
for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。...
2021-01-04 10:22:58
1104
原创 C/C++线程函数_beginthreand和_beginthreadex
一、背景介绍 ★两套API :OS API vs CRT API 首先,Windows操作系统本身提供了线程的创建函数CreateThread 和销毁函数ExitThread 。其中的CreateThread 用于创建线程,ExitThread 用于在线程函数内部推出线程(也就是自杀)。 其次,在Visual C++自带的C运行库(以下简称CRT)中,还带了另外4个API函数,分别是:_beginthread ,_endthread ,_beginthreadex ,_endthreadex
2021-01-01 14:01:01
707
转载 IO操作与各种模型
转载自https://www.cnblogs.com/zhangyux/p/6195860.html协程协程,又称微线程,纤程。英文名Coroutine。协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程
2020-12-20 14:41:28
577
转载 恶心人的QT512版本连接MYSQL80
转载,我自己用的是MYSQL8.0.21+QT MinGw64位 亲测成功 在使用Qt操作MySQL数据库过程中,使用Qt编写好连接MySQL数据库的的代码后,编译调试时报错QSqlDatabase: QMYSQL driver not loaded,意味着Qt应
2020-10-19 14:17:33
513
原创 Libevent的简单使用过程
Libevent库作用 开源的库、提高了开发效率 封装了socket通信 封装了IO多路转接 精简,专注于网络,性能高 事件驱动形式过程:1、事件的底层处理框架 一个函数2、消息循环 一个函数3、创建事件 不带缓冲区—event 几个函数 带缓冲区 ----bufferevent 几个函数4、资源释放 几个函数事件处理框架-event_base1、在使用libevent函数之
2020-09-24 17:30:30
1089
原创 互斥锁和条件变量的性能
介绍本文以最简单生产者消费者模型,通过运行程序,观察该进程的cpu使用率,来对比使用互斥锁 和 互斥锁+条件变量的性能比较。本例子的生产者消费者模型,1个生产者,5个消费者。生产者线程往队列里放入数据,5个消费者线程从队列取数据,取数据前需要判断一下队列中是否有数据,这个队列是全局队列,是线程间共享的数据,所以需要使用互斥锁进行保护。即生产者在往队列里放入数据时,其余消费者不能取,反之亦然。互斥锁实现的代码#include <iostream> // std::cout#...
2020-09-16 12:29:23
480
转载 http和https 握手过程
现在这个社会,我们都离不开网络,那么网络的工作流程是怎么样的呢?从http发起请求到完成请求,网络到底给我们做了什么事情? 今天我们主要来分析下http请求的过程: 在Http工作之前,Web浏览器通过网络和Web服务器建立链连接,该连接是通过Tcp来完成的,该协议和Ip共同组成了Internet,即著名的Tcp/Ip协议族,因此Internet也被称为Tcp/Ip网络,Http是比Tcp更高的应用...
2020-09-13 02:12:53
328
转载 TOP K 问题
怎样从10亿查询词找出出现频率最高的10个1. 问题描述在大规模数据处理中,常遇到的一类问题是,在海量数据中找出出现频率最高的前K个数,或者从海量数据中找出最大的前K个数,这类问题通常称为“top K”问题,如:在搜索引擎中,统计搜索最热门的10个查询词;在歌曲库中统计下载率最高的前10首歌等等。2. 当前解决方案针对top k类问题,通常比较好的方案是【分治+trie树/hash+小顶堆】,即先将数据集按照hash方法分解成多个小数据集,然后使用trie树或者hash统计每个小数据集中的query
2020-09-12 23:26:17
127
原创 操作系统的各种锁
互斥锁互斥锁指代相互排斥,它是最基本的同步方式。互斥锁用于保护临界区,以保证任何时刻只有一个线程在执行其中的代码(假设互斥锁由多个线程共享),或者任何时刻只有一个进程在执行其中的代码。多线程中如果忘记释放锁,可以在异常处理函数中进行释放。1. 互斥锁类型: 创建一把锁:pthread_mutex_t mutex;2....
2020-09-09 11:09:01
8302
转载 非阻塞套接字的WSAEWOULDBLOCK错误通过select解决
讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事。套接字模式:阻塞套接字和非阻塞套接字。或者叫同步套接字和异步套接字。套接字模型:描述如何对套接字的I/O行为进行管理。Winsock提供的I/O模型一共有五种:select,WS...
2020-09-09 10:28:42
1768
转载 MFC的AfxBeginThread函数
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的。现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和过程:用户界面线程的AfxBegi...
2020-09-09 00:13:17
943
原创 C/C++实现的各种排序
/*直插排序 */void InsertSort(vector<int> &arr){ for(int i = 1;i < arr.size();++i){ for(int j = i;j > 0;--j){ if(arr[j] < arr[j - 1]){ int temp = arr[j]; arr[j] = arr[j-1];
2020-09-03 22:30:20
153
原创 C++函数的__stdcall、__cdecl和__fastcall调用约定。
C++函数的三种调用约定__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。调用协议常用场合 __stdcall:Windows API默认的函数调用协议。 __cdecl:C/C++默认的函数调用协议。 __fastcall:适用于对性能要求较高的场合。
2020-09-01 20:02:33
458
原创 TCP通信状态转换
TCP状态转换下面这个图需要将主要的过程牢牢记住。这对于排除和定位网络故障有着很大的作用·············································································CLOSED:表示初始状态。LISTEN: 该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT
2020-08-31 20:46:27
218
原创 Linux 多路I/O复用转接的Select模型的服务端和客户端
多路I/O转接服务器多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。简称找内核秘书帮干事,来人跟我说。Select1. select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开的文件描述符个数并不能改变select监听文件个数。2. 解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用的是轮询模型,会大大降低服务器响应效率,不应在sel
2020-08-30 23:38:13
171
原创 Linux环境下的简单多线程和多进程结合编写的服务器
引言:在学习完老版黑马的多进程和多线程后步入了网络编程的学习,因此通过视频等教学简单编写封装了再Linux环境下的SOCKET的函数,用于直接使用而不用进行错误的判断(全封装在head.h和head.c的文件了),直接调用里面的函数。十分方便!head.h#ifndef __WRAP_H_#define __WRAP_H_void perr_exit(const char *s);int Accept(int fd, struct sockaddr *sa, socklen_t *salenp
2020-08-29 16:37:36
257
转载 MFC的常用结构
目录: 1:MessageBox -------------------------------- 12:MessageBox ---------------------------------43:MessageBox &nbs...
2020-08-29 13:13:36
1495
原创 多态 虚函数 结合小型好用图形库
虚函数实现多态的列子(动物叫。小型图形库)所用的图形库是:EasyX。首先是基类、纯虚函数base:#pragma once#include "easyx.h"#include "mmsystem.h"#include <Windows.h>#pragma comment(lib,"winmm.lib")class animal{public: virtual void draw() = 0; //绘图的 virtual void shout() = 0;
2020-08-08 22:56:54
173
原创 2020 7/28 面试 C++客户端实习//
2020 我的 C++客户端(实习) 面试内容巨峰网络一、C++,联合体、结构体、枚举类的不同。结构体:struct NUM{int number;}a;结构体是声明只是一个模型,没有分配内存空间。当进行定义结构体变量后才分配内存空间联合体:union data{int a;}b;大体和结构体一样,不同之处在于,它将几个不同的变量存放在同一单元,在联合体中,各个成员变量所占内存的字节数各不相同,但都从同一个首地址开始。不管在任何时刻,只有一个变量处于活动状态。联合体所占的内存
2020-07-28 19:30:50
253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人