编程初学
物联网小镇
这个作者很懒,什么都没留下…
展开
-
CreateMutex、WaitForSingleObject、ReleaseMutex
我们对线程做一些简单的同步处理,这里我们用互斥量(Mutex)。互斥量(Mutex)和二元信号量类似,资源仅允许一个线程访问。与二元信号量不同的是,信号量在整个系统中可以被任意线程获取和释放,也就是说,同一个信号量可以由一个线程获取而由另一线程释放。而互斥量则要求哪个线程获取了该互斥量锁就由哪个线程释放,其它线程越俎代庖释放互斥量是无效的。在使用互斥量进行线程同步时会用到以下几个函数:HANDLE WINAPI CreateMutex( LPSECURITY_ATTRIBUTES lpMute原创 2021-02-02 20:06:33 · 1730 阅读 · 1 评论 -
关于程序员就业岗位及岗位市场的思考
关于就业岗位和岗位市场分析,就我目前工作经验来看,可以从编程语言来看。几种大类的编程语言分为java,C,C++,python.主流的编程语言是java和C,C++和python比较少。为什么C和java比较多呢?c是比较偏底层的,万物皆C。基本上所有的高级编程语言是从C的基础上改进而来的。c可以做终端,可以写服务器,可以写游戏。终端市场是比较大的,所以C行业的人还是有很大市场。个人感觉C行业的人是比较偏向于研究。其次是java,Java可以这么讲,Java在做社区。基本上Java包揽了绝大部分服务器,原创 2021-02-02 17:39:39 · 299 阅读 · 0 评论 -
学习路径
http://www.linuxidc.com/原创 2021-01-28 17:21:05 · 80 阅读 · 0 评论 -
cjson调用的实例 c++
调用动态库:MinipaydllFunction.h在这里插入代码片// MinipaydllFunction.h: interface for the CMinipaydllFunction class.////////////////////////////////////////////////////////////////////////#if !defined(AFX_MINIPAYDLLFUNCTION_H__6617657F_2139_4A1D_B647_604E4F16D86原创 2021-01-24 20:40:49 · 251 阅读 · 0 评论 -
c++程序员会用到的函数积累
publicFunction.h在这里插入代码片#ifndef PUBLICFUNCTION_H#define PUBLICFUNCTION_H#include <QObject>struct FuWuQiData{ char id[128]; char datafwq[1024]; FuWuQiData() { memset(id,0x00,128); memset(datafwq,0x00,1024); }};//m_FuWuQiDatausing name原创 2021-01-24 13:24:11 · 166 阅读 · 1 评论 -
C++中list的使用方法及常用list操作总结
C++中list的使用方法及常用list操作总结一、List定义:List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢。使用时需要添加头文件#include 二、List定义和初始化:listlst1; //创建空listlist lst2(5); //创建含有5个元素的listlistlst3(3,2); //创建含有3个元素的listlistlst4(lst2); //使用lst2初始化lst4原创 2021-01-16 10:20:58 · 2539 阅读 · 0 评论 -
贪吃蛇游戏的C++代码
游戏效果:在这里插入代码片#include <iomanip>#include <windows.h>#include <conio.h>using namespace std;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//全局句柄class snake;void Init_Console();//控制台初始化void gotoPos(SHORT x = 0, SHORT y = 0);//光标坐标控原创 2020-05-20 09:55:31 · 1296 阅读 · 0 评论 -
VC++6.0出现no compile tool is associated with the extension.解决方法
在编译vc6.0程序的时候经常出现下图的错误提示:解释为:不能编译此BmpRot.h文件,没有合适的编译工具可以编译此扩展名的文件。很明显,当然只有.cpp文件才能编译. .h头文件是不能编译的。因此我们只需要将当前文件切换为.cpp文件即可。...原创 2020-05-19 11:00:25 · 1909 阅读 · 0 评论 -
c语言符号
<<,有符号左移位,将运算数的二进制整体左移指定位数,低位用0补齐。 >>,有符号右移位,将运算数的二进制整体右移指定位数,整数高位用0补齐,负数高位用1补齐(保持负数符号不变)。运算符 含义 描述<< 左移 用来将一个数的各二进制位全部左移N位,高位舍弃,低位补0。>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0。& 按位与原创 2020-05-19 09:30:30 · 165 阅读 · 0 评论 -
lib(静态库)和dll(动态库)的生成和使用详细说明以及注意事项
1.lib库我们称之为静态库,在编译的时候调用,而dll库早使用的时候地时候调用。如果你希望自己写的库既能给c语言用,又能给c++语言用。就需要写一个宏,如下所示,这个宏表不管是C++工程调用还是C工程调用,都以C的方式调用#ifdef __cplusplusextern "C"{ #endif int ADD(int a,int b); #ifdef __cplusplus}#endif...原创 2020-05-13 20:57:21 · 1089 阅读 · 0 评论 -
华科研究生复试机试题代码堆积供以后参考
题目描述对N个长度最长可达到1000的数进行排序。输入描述:输入第一行为一个整数N,(1<=N<=100)。接下来的N行每行有一个数,数的长度范围为1<=len<=1000。每个数都是一个正数,并且保证不包含前缀零。输出描述:可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。示例1输入复制31111111111111111111111111111122222222222222222222222222222222原创 2020-05-12 09:09:40 · 122 阅读 · 0 评论 -
静态成员函数
1…静态成员函数的特点:2.静态成员变量的特点:原创 2020-05-11 14:04:44 · 96 阅读 · 0 评论 -
int型数字转char型指针
原创 2020-05-10 22:50:49 · 1551 阅读 · 0 评论 -
c,C++语言中、\t \r \n 和空格什么意思
\t 跳格 \r 回车 \n 换行\ 反斜杠 \a 警告 \b 退格 \f 换页 \v 垂直跳格原创 2020-05-08 15:45:26 · 3392 阅读 · 5 评论 -
用户态和内核态的区别
1.操作系统需要两种CPU状态内核态(Kernel Mode):运行操作系统程序,操作硬件用户态(User Mode):运行用户程序2.指令划分特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机非特权指令:用户程序可以使用的指令。 举例:控制转移 算数运算 取数指令 访管指令(使用户程序从用户态陷入内核态)...原创 2020-05-07 11:25:29 · 182 阅读 · 0 评论 -
对于指针传入函数,却最终没有改变指针的值的问题
原本写了一个函数,用于去掉字符串中的空格void CMy21EnAIDlg::Onencyai() { CString strEncryptionData; m_txt_EncryptionData.GetWindowText(strEncryptionData); char Enddata[128]={0}; char Endata[128]={0}; int index = 0;...原创 2020-05-06 16:55:28 · 1455 阅读 · 0 评论 -
string 与char *的区别
string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便。char *是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。char *的内存管理由用户自己处理,很容易出现内存不足的问题。char *s="string"的内容是不可以改的;c...原创 2020-05-03 23:47:02 · 2557 阅读 · 0 评论 -
用VC++实现USB接口读写数据的程序
使用一个GUIDguidHID_1查找并打开一个USB设备extern "C" int PASCAL SearchUSBDevice(){ HANDLE hUsb; int nCount, i, j;//标记同一设备个数 HDEVINFO hDevInfoSet; BOOL bResult; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =N...原创 2020-04-30 14:53:22 · 1561 阅读 · 0 评论 -
usb数据的接收和打印,除了问题,接收数据不全
首先调用usb.input(bRecvBuf+iRecvLen, 8192,100,iRet);//数据接收函数int Cusb::input(PSTR pRspData, DWORD nMaxRspDataSize, DWORD milliseconds){ DWORD dwNumberOfBytesTransffered = 0 ; int nRet = -1 ; DWORD...原创 2020-04-27 19:47:19 · 241 阅读 · 0 评论 -
vc获取当前路径,并且创建文件
不用说,直接贴码二个函数NoteTxtAddLog(打印文件),GetCurDir(获取当前目录)首先使用的函数:NoteTxtAddLog(GetCurDir() +“日志.txt”,strFormat,strFormat.GetLength(),TRUE,FALSE);解释函数:NoteTxtAddLog(CString sFile,CString byData,DWORD dwSiz...原创 2020-04-26 17:23:57 · 236 阅读 · 0 评论 -
LNK1136报错解决方法
fatal error LNK1136: invalid or corrupt file:解决办法,将工程的动态库设置为静态库原创 2020-04-26 17:07:44 · 2881 阅读 · 0 评论 -
error LNK2001:错误解决过程
ReadUsbFileDlg.cppF:\XPJ\ReadUsbFile\ReadUsbFileDlg.cpp(213) : warning C4101: ‘pBuf’ : unreferenced local variableLinking…ReadUsbFileDlg.obj : error LNK2001: unresolved external symbol “public: __t...原创 2020-03-31 15:15:01 · 2154 阅读 · 0 评论 -
报错代码
ERROR_IO_PENDINGIO等待 表示 这次操作没有立即完成(不算文件读取错误)*//报错程序LPVOID lpMsgBuf;FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),...原创 2020-01-08 13:38:22 · 586 阅读 · 0 评论 -
和USB设备建立通信的过程
1.SetupDiGetClassDevs,返回设备信息结构的句柄2.SetupDiEnumDeviceInterfaces,枚举设备。3.获得设备路径:SetupDiGetDeviceInterfaceDetail,设备路径大小信息4.SetupDiGetDeviceInterfaceDetail,设备路径详细信息5.CreateFile创建读写句柄6.writeFile。对设备进行读...原创 2020-01-03 15:59:25 · 998 阅读 · 1 评论 -
error C2660: 'MessageBoxA' : function does not take 4 parameters
解决办法,使用域操作符::MessageBox(),则使用API的4个参数形式::MessageBox(NULL,"","",MB_OK);将MessageBox( NULL, (LPCTSTR)lpMsgBuf, “Error”, MB_OK | MB_ICONINFORMATION );改为:::MessageBox( NULL, (LPCTSTR)lpMsgBuf, “Error”,...原创 2020-01-03 14:16:35 · 1920 阅读 · 0 评论 -
临界区对象
EnterCriticalSection(&g_cs)LeaveCriticalsection(&g_cs)原创 2020-01-02 20:55:39 · 105 阅读 · 0 评论 -
DWORD dwSendTime =::GetTickCount();
DWORD nOverTime =1000; DWORD dwSendTime =::GetTickCount(); if (::GetTickCount() -dwSendTime >= (DWORD)nOverTime) { break; }GetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(el...原创 2019-12-25 18:38:18 · 307 阅读 · 0 评论 -
WriteFile函数
将数据写入指定的文件或输入/输出(I / O)设备。返回值如果函数成功,则返回值为非零(TRUE)。如果函数失败或异步完成,则返回值为零(FALSE)。若要获取扩展的错误信息,请调用 GetLastError函数。注意 该GetLastError函数代码 ERROR_IO_PENDING还不是一个失败者; 它指定写操作正在异步完成挂起。有关更多信息,请参见备注。...原创 2019-12-25 16:25:00 · 4750 阅读 · 0 评论 -
数组 a+1的值
char szBlock[100+1] = { 0 } ; printf("%p\n",szBlock); printf("%p\n",szBlock+1);输出结果:表明数组加1表示数组后挪动一位数原创 2019-12-25 10:43:31 · 1040 阅读 · 0 评论 -
switch中default的用法
default什么时候会执行?default的位置对执行结果有影响吗?default只有在case匹配失败的时候才会执行 int a=4; switch (a){ case 1: System.out.println("1"); break; case 2: System.ou...原创 2019-12-24 15:43:15 · 907 阅读 · 0 评论 -
在线版的msdn
https://docs.microsoft.com/zh-cn/windows/win32/api/ioapiset/nf-ioapiset-getoverlappedresult原创 2019-12-24 15:08:50 · 761 阅读 · 0 评论 -
CreateEvent(NULL,TRUE,FALSE,NULL);的解释
初始化为:m_hReadEvent=CreateEvent(NULL,TRUE,FALSE,NULL);1.,确定返回的句柄是否可被子进程继承.如果lpEventAttributes是NULL,此句柄不能被继承。2.指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当一个等待线程被释放以后,系...原创 2019-12-20 15:59:38 · 2063 阅读 · 0 评论 -
vmbox虚拟机安装win10
不可安装大于4g的系统原创 2019-12-20 13:31:56 · 280 阅读 · 0 评论 -
WaitForSingleObject的用法举例
WaitForSingleObject是一种Windows API函数,当等待仍在挂起状态时,句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE 访问权限。WaitForSingleObject函数用来检测hHandle事件的信号状态,里面有两个参数,一个是信号句柄,一个是等待的时间,DWORD WaitForSingleObject(HANDLE hHandle,...原创 2019-12-19 14:39:24 · 489 阅读 · 0 评论 -
C++难题之多态性详细解释
C++的多态性是C++实现面向对象技术的基础。具体的说,通过一个指向基类的指针调用虚成员函数的时候,将能够根据指针所指向的实际对象调用成员函数。#include "stdafx.h"class father{public: void duotai() { printf("调用的是父函数\n"); } virtual void fun() { printf("调用...原创 2019-12-18 15:54:54 · 145 阅读 · 0 评论 -
extern "C"的主要作用简单解释
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。这个功能十分有用处,因为在...原创 2019-12-18 08:44:51 · 229 阅读 · 0 评论 -
#pragma message的作用
一般情况下,#pragma message( messagestring )是在编译期间,将一个文字串(messagestring)发送到标准输出窗口,没有实际作用,对代码不影响原创 2019-12-16 20:25:35 · 1600 阅读 · 0 评论 -
报Access数据库不存在或者打不开的错误
我安装的是access2010,而打开数据库的代码为if (! m_Ado.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data.mdb")) { AfxMessageBox("连接数据库失败,检查数据库为是否存在!"); // AfxMessageBox("Can't connect the language datab...原创 2019-12-14 15:24:28 · 1092 阅读 · 0 评论 -
CList添加出错AddTail();rror C2664: 'struct __POSITION *__thiscall CList错误
报错:error C2664: ‘struct __POSITION *__thiscall CList<struct Cusb::STU_SENDDATA,struct Cusb::STU_SENDDATA &>::AddTail(struct Cusb::STU_SENDDATA &)’ : cannot convert parameter 1 from 'stru...原创 2019-12-14 10:47:38 · 354 阅读 · 0 评论 -
10进制转换成16进制
更新中。。。。。。。。。任意2-36进制数转化为10进制数。建议自己写函数,代码如下:int Atoi(string s,int radix) //s是给定的radix进制字符串{ int ans=0; for(int i=0;i<s.size();i++) { char t=s[i]; if(t>='0'&&t<='9') ans=a...原创 2019-12-14 10:44:58 · 718 阅读 · 0 评论