2022年3月11日
摘要: 1.简介各种函数调用方式: _cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _stdcall 阅读全文
posted @ 2022-03-11 16:24 freden 阅读(584) 评论(0) 推荐(0) 编辑
  2021年9月20日
摘要: 学习地址:大丙老师线程同步 1.线程同步的作用 (1)对临界资源的进程保护; (2)对线程先后顺序的依次执行; 2.线程同步的方式-加锁 3.互斥锁 (1)互斥锁函数 //在 Linux 中互斥锁的类型为 pthread_mutex_t,创建一个这种类型的变量就得到了一把互斥锁. //在创建的锁对象 阅读全文
posted @ 2021-09-20 11:05 freden 阅读(594) 评论(0) 推荐(0) 编辑
  2021年9月19日
摘要: 参考:大丙老师线程 1.个数控制 2.创建线程 3.编译的时候需要注意: 4.线程退出 子线程是在主线程中创建的,因此主线程退出之后子线程也就结束运行,但是子线程的结束不影响主线程的的运行。 如下的示例,子线程并不会在终端打印出id信息,因为主线程运行结束之后就退出了并且释放了地址空间,因此子线程也 阅读全文
posted @ 2021-09-19 13:49 freden 阅读(634) 评论(0) 推荐(0) 编辑
  2021年9月18日
摘要: 一、框架方案 accept是主线程,不断等待客户端的连接,一旦有客户端连接过来,那么创建新的线程用于通讯 注意资源共享:栈空间不共享,全局区和堆空间是共享的; 二、多线程的并发实现 1.主进程 (1)server建立的步骤中,accept连接之后,需要创建一个新的子线程用于处理当前连接的客户端,将通 阅读全文
posted @ 2021-09-18 17:15 freden 阅读(457) 评论(0) 推荐(0) 编辑
  2021年9月15日
摘要: 一、dup与dup2: #include<unistd.h> int dup(int file_descriptor); 复制文件描述符(file_descriptor)到另一个对象(返回值,在文件描述符池中去找新的)使得两个文件描述符是指向同一个文件的,而且可以通过这两个文件描述符对文件进行读写。 阅读全文
posted @ 2021-09-15 15:06 freden 阅读(179) 评论(0) 推荐(0) 编辑
  2021年9月14日
摘要: 一、c/s架构下的socket通讯框架图 二、网络通信API 1.主机字节序&网络字节序 htonl htons ntohl ntohs 2.socket地址 sockaddr_in sockaddr_in6 3.ip地址转换函数 三、服务器端编程 #include<stdio.h> #includ 阅读全文
posted @ 2021-09-14 18:53 freden 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 部署代理服务器:http代理服务器(squid程序) 主机1部书squid代理服务器: 1、在主机1上安装squidroot@linux_ever:~# apt-get install squid 2、修改squid的配置文件squid.confroot@linux_ever:~# gedit /e 阅读全文
posted @ 2021-09-14 18:52 freden 阅读(743) 评论(0) 推荐(0) 编辑
  2021年9月11日
摘要: 参考:C++ static const volatile总结 const 1.const位于*左侧,用来修饰指针指向的变量,故指针指向常量// 指针不允许改变数据 int b = 500; const int *a = &b; *a = 600; // error // 可以通过变量本身去修改 in 阅读全文
posted @ 2021-09-11 18:44 freden 阅读(379) 评论(0) 推荐(0) 编辑
  2021年7月28日
摘要: 泛型 泛型相比反射,委托等较为抽象的概念要更接地气得多,而且在平常工作时,我们几乎时刻都和泛型有接触。大部分人对泛型都是比较熟悉的。 泛型集合是类型安全的集合。相对于泛型System.Collections.Generic,我们有类型不安全的集合System.Collections,其中的成员均为O 阅读全文
posted @ 2021-07-28 23:20 freden 阅读(964) 评论(0) 推荐(1) 编辑
摘要: 异步是与同步相对的,是一种时序上的概念,即事件处理顺序。 如果A事件需要等待B事件完成才能运行,那么A与B就是同步的;相反的,如果A事件运行不需要等待B事件的完成,也就是说,B还在运行,A就可以自己决定是否需要运行,那么A与B就是异步的。 可见,同步与异步的关键在于是否需要等待。 有一个很容易跟异步 阅读全文
posted @ 2021-07-28 21:41 freden 阅读(51) 评论(0) 推荐(0) 编辑
  2021年7月26日
摘要: 一、原理 简单来说,共享内存的方式,就是在内存中开辟一块区域,专门用来存放进程需要交换的消息。当内存中已有被A进程写入了消息,那么其他进程就可以在此内存中读取到A进程想分享的消息了。关于内存的操作,Kernel32.dll为我们提供了便捷的函数接口。 1.CreateFileMapping 创建文件 阅读全文
posted @ 2021-07-26 20:27 freden 阅读(366) 评论(0) 推荐(0) 编辑
  2021年7月21日
摘要: 一、发送方 User32.dll中提供了发送消息的系统API。 [DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage( IntPtr hWnd, //目标窗体句柄 int 阅读全文
posted @ 2021-07-21 16:41 freden 阅读(279) 评论(0) 推荐(0) 编辑
  2021年2月8日
摘要: 链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?answerType=1&f=discussion来源:牛客网 改编方法一使用栈 class Solution { public: vector 阅读全文
posted @ 2021-02-08 16:20 freden 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 重点是,如何管理kk的值与最终结果的关系。 /* struct TreeNode { int val; struct TreeNode *left; struct Tre 阅读全文
posted @ 2021-02-08 16:19 freden 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 一、中序遍历,队列保存、 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tr 阅读全文
posted @ 2021-02-08 10:05 freden 阅读(110) 评论(0) 推荐(0) 编辑