WININET FTP API
1.代码来源:windows program design(5th)--charpter23
2.功能:
a.访问FTP
b.下载文件到本地
c.读取本地文件内容并显示
获取服务器系统时间,并修改本地电脑时间
windows程序设计5th
改变按钮的消息映射。
通过SOCKET 获取服务器系统时间,并修改本地电脑时间。
Radio Button值的获取
字串特殊值的获取
自动事件重置内核对象
windows核心编程chart09:自动事件重置内核对象学习
条件变量和读写锁实现线程同步
//windows核心编程5th
生产者部分
请求独占锁锁 AcquireSRWLockExclusive(&g_srwLock)
程序处于运行状态,并且数据已满:生产者转入休眠状态 SleepConditionVariableSRW(&g_cvReadyToProduce, &g_srwLock, INFINITE, 0);
程序停止工作:释放独占锁并且唤醒其它生产者退出程序ReleaseSRWLockExclusive(&g_srwLock);
WakeAllConditionVariable(&g_cvReadyToProduce);
否则:释放独占锁并且唤醒一个消费者
ReleaseSRWLockExclusive(&g_srwLock);
WakeAllConditionVariable(&g_cvReadyToConsume);
update mysql with c++
本文主要是实现 c++ 读写图片到mysql
update mysql with c++
update mysql with
事件控制两个线程之间通信
功能实现部分
//用来控制线程的运行与否,直接从地址中读取数据
volatile BOOL m_ThreadRun[2];
//增加全局事件对象,用来监控线程,控制线程是否运行
CEvent event;
void ThreadFunc1(LPVOID pParam);
void ThreadFunc2(LPVOID pParam);
图像实时切换
因项目需要,遇到的问题现象:线程间操作无效,从不是创建控件的线程访问它.
主要是解决多线程与界面之间的通信
通过中间类代理Invoke
自定义消息CS端实现
1自定义消息服务端
1.1建立一个基于对话框的类Csmessage_serverDlg
1.2增加成员函数定义与实现
public:
afx_msg LRESULT OnGetTextMessage(WPARAM wParam,LPARAM lParam);
afx_msg LRESULT Csmessage_serverDlg::OnGetTextMessage(WPARAM wParam,LPARAM lParam)
{
return 0;
}
STL基础test01
string==>char *互转
string中显示特定字符串
MyCallbackWithinClass
实现的功能:
1构造函数中创建一个线程
2线程的回调函数调用头文件中的一个变量,就以在构造函数中实现为例。
线程句柄调试
在控制台创建两个线程以后,此时任务管理器出现3个线程(一个主线程+2个子线程)。
每隔一定时间检查线程1,2的动作情况。
线程1退出后,关闭线程1句柄
线程2退出后,不关闭线程2句柄
手动关闭线程2句柄。
任务管理器中将看到:
线程数递减,句柄数也依次减少。
在多个实例间共享数据
对于同一个进程,多次加载时,会创建其多个实例,如第一个实例A的进程地址空间(4GB),第二个实例B的进程地址空间(4GB),每个进程实例的地址空间中都有多个代码页面和 多个数据页面,
首次A加载时,它们会被映射到虚拟内存中,当出出数据页面被修改时,系统会首先截获,接着为应用程序A试图写入的内存页面分配一块新的内存,然后复制页面内容,最后让应用程序写入刚分配的内存块.此时,应用程序A的数据页面已经指向的新的地方.这里主要运用了页面的写时复制特性.
桌面\关于WaitForSingleObject实例分析
同步方式的线程同步机制具有速度快的特点,但也有局限性,如互锁家族只能在单值上运行,根本无法例线程进入等待状态.
可以用关键代码使线程进入等待状态,但是只能用于单个进程的中的线程同步.
关键代码容易使死锁发生,因为无法设定超时的值.
面对用户模式下的问题与不足,我们来分析一下内核模式下的线程同步,通过使用ProcessExplorer工具分析,得到当一个句柄被调用多次时,前面的句柄(你可以kill 之前的那些个线程)等待函数将失效,程序只处理最新的那个等待信号.
WINDOWS核心编程之消息分流
每个消息都有 wParam 和 lParam,如WM_COMMAND,wParam包含两个不同的值,其中:
wParam:低字节是控件的id,高字节是通知码 notifyCode
lParam: 强制转换为按钮或控件的句柄值 hWndCtl
动态库与静态库生成实践
1.编译生成静态库
gcc -c libdemo.c -o libdemo.o
ar rcs libdemo.a libdemo.o
gcc testdemo.c -o testdemo -static -L. -ldemo
运行: ./testdemo
获取当前进程的列表
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建当前快照列表
PROCESSENTRY32* info=new PROCESSENTRY32; //创建进程信息变量,用于保存信息
info->dwSize=sizeof(PROCESSENTRY32); //设置块大小
int i=0;
if(Process32First(handle,info))//开始枚举进程
{
if(GetLastError()==ERROR_NO_MORE_FILES )
{
AfxMessageBox("No More Process");
}
else
{
CString id;
id.Format("%d",info->th32ProcessID);//获取当前进程ID
m_list.InsertItem(i,id);//插入一个项目
m_list.SetItemData(i,info->th32ProcessID);//设置项目值
id.Format("%s",info->szExeFile);//获取当前进程名
m_list.SetItemText(i,1,id);//设置名
i++;
while(Process32Next(handle,info) !=FALSE)//继承获取进程
{
id.Format("]",info->th32ProcessID);
m_list.InsertItem(i,id);
m_list.SetItemData(i,info->th32ProcessID);
id.Format("%s",info->szExeFile);
m_list.SetItemText(i,1,id);
i++;
}
}
}
CloseHandle(handle);//关闭进程句柄
从数据库中取变量传递给shell,生成环境变量
从DB中取检索值传递给shell,生成环境变量
1. 编写myshellpara.sql
通过spool 执行一个SQL读取所要的值,结果保存在myshellvar_export.sh
set feedback off;
set heading off;
set pagesize 0;
set linesize 1000;
set numwidth 12;
set termout off;
set trimout on;
set trimspool on;
spool myshellvar_export.sh
select '#!/bin/bash' from dual
union all
select 'export my_shell_para='||to_char(count(*))
from yourtable where create_time ='2012.06.09';
spool off
exit
2. 主脚本,连续数据库,执行myshellpara.sql
#!/bin/bash
#Sqlplus user/pwd@ip @myshellpara.sql < /dev/null
Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null
chmod 777 myshellvar_export.sh
#注意.这里的技巧,变相执行 myshellvar_export.sh,生成linux 系统的环境变量
source myshellvar_export.sh
echo 'query value from db:'$my_shell_para
3. 结果查看
export $my_shell_para
4.myshellpara2.sh是没有生成环境变量,而是利用了cat 直接读取
5.结束
linux基于多进程的socket通信
// Client/Server模型的服务器端
#include
#include
#include
#include
#include
#include
#include
#include
#include "../comm/my_recv.h" // 自定义的头文件
#include "../comm/my_recv.c"
#define SERVER_IP "127.0.0.1"
#define SERV_PORT 6666 // 服务器端的端口
#define LISTENQ 12 // 连接请求队列的最大长度
#define INVALID_USERINFO 'n' // 用户信息无效
#define VALID_USERINFO 'y' // 用户信息有效
#define USERNAME 0 // 接收到的是用户名
#define PASSWORD 1 // 接收到的是密码
创建一个简单的COM组件
创建一个简单的COM组件
1.FILE-->NEW-->ATL COM AppWizard
a.输入 projectname ,如 Myom001-->ok
b.紧接着,出现 ALT COM ControlWizard-step 1 of 1.
第二步选择: service_type: Dynamic Link Library(DLL)
c.完成
sqlload learn
1.连接数据库,并指定控制文件
sqlldr kikop/*****@zxin control = "F:\MYSQLLOAD\kikop.ctl" log ="F:\MYSQLLOAD\kikop.log"
2.设定控制文件内容 kikop.ctl
LOAD DATA
CHARACTERSET ZHS16GBK --让导入的为 中文 防止乱码
INFILE 'F:\MYSQLLOAD\kikop_source.txt'
BADFILE 'F:\MYSQLLOAD\kikop_error.txt'
--REPLACE
APPEND
--INSERT
--TRUNCATE
INTO TABLE sys.mysqlload
WHEN my_value <> "null"
FIELDS TERMINATED BY "," --以逗号分隔
Optionally enclosed by '"' --不写入又引号
trailing nullcols --表的字段没有对应的值时允许为空
( my_name,
my_value,
my_write_time,
my_id "SEQ_ID.nextval"
)
XPathTutorialDoc
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,dom4j的快速手册里也建议使用这种方式
执行时却抛出以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
不光要有dom4j这个包,还要有jaxen包
开源的android web服务器编译过程总结
i-jetty的项目地址:
http://code.google.com/p/i-jetty/
https://github.com/jetty-project/i-jetty
i-jetty是一个Google的开源项目Jetty for Android,即开源Android web服务器。据了解:android平台上搭建web服务器,html、javascript、css和servlet 可以正常访问,但 jsp提示 “jsp support not configured”。
Vs2010编译 mongodb c++驱动详述
1.编译环境
(1)下载vs2010
(2) 下载python2.7
https://www.python.org/downloads/
python-2.7.11.msi
下载scons2.4.1,The current production release of SCons is 2.3.0;
http://www.scons.org/doc/
http://www.scons.org/doc/2.4.1/
http://www.scons.org/doc/2.4.1/HTML/scons-user.html#AEN263
http://www.scons.org/doc/2.4.1/HTML/scons-user.html#idp1377418076
scons-2.4.1-setup.exe
(4)(3) 安装python 和 scons, 将D:\Python27\、D:\Python27\Scripts写入PATH环境变量。
(5)安装boost1.57版本的库,直接下载windows版本编译好的库
http://www.boost.org/users/download/
http://sourceforge.net/projects/boost/files/boost-binaries
boost_1_57_0-msvc-10.0-64.exe
按照boost,安装目录:D:\local\boost_1_57_0
以这个为例,则:
Boost include目录:D:\local\boost_1_57_0\boost
Boost 已经编译成功的libs&dll:D:\local\boost_1_57_0\lib64-msvc-10.0
注意:这里编译的应该是boost的动态库和 lib。
基于 QML插件的编写分析
本文基于Qt自带的qmlextensionplugins demo,做了一下分析。主要包括工程的创建、插件的编写、插件的安装部署及插件的调用。
Qt Material
Qt android QML Component design based google.
sqllite数据读取
本节讲的内容主要是从sqllite数据读取内容,用qml 中的GridView进行数据展示。
Version:1.0 StartHTML:0000000107 EndHTML:0000003758 StartFragment:0000000127 EndFragment:0000003740
The QSqlQueryModel class provides a read-only data model for SQL result sets. More...
关于Android应用程序外部文件引用
Qt 利用了这种机制,实现了 assets 虚拟文件系统,我们常见的 QFile 、 QPixmap 、 QImage 等,都可以通过 "assets:/" 的
方式来访问 assets 内的文件。
使用 assets 虚拟文件系统,你的资源文件不会在程序启动时就加载到内存,比较节省资源。
NSIS程序打包文档
NSIS里那种算法打包出来的文件更小
答: LZMA 固实 相当于 7z 创建固实压缩档案 如果用 SetCompressorDictSize 把字典调大 不过同时也减慢了速度 占用更大内存 应该可以把压缩调到极限压缩等级 7z 的极限压缩默认字典为 32 MB
MyWMCopyDataRecv
DWORD dwTextLenth GetWindowTextLength hwndEdit + 1 sizeof TCHAR ;
LPTSTR szText LPTSTR HeapAlloc GetProcessHeap HEAP NO SERIALIZE dwTextLenth ;
memset szText 0 dwTextLenth ;
GetWindowText hwndEdit szText dwTextLenth sizeof TCHAR ;
线程同步_Event
1. CreateEvent
HANDLE hEvent = CreateEvent(
NULL, // 默认安全属性
TRUE, // 手工重置
FALSE, // 初始为未置位的
NULL // 未命名
);
如果启用手工重置bManualReset,则需要手工重置 ResetEvent
Windows服务编写实践
编写服务的几个步骤
1) 实现ServiceMainFunction
2) 定义SERVICE_TABLE_ENTRY,引用ServiceMainFunction
3) 取得应用程序路径
GetModuleFileName
OpenSCManagerW
CreateService
4) 启动时,关联控制函数:StartServiceCtrlDispatcher
Socket Connect&Disconnect
说明:在此图中HostA充当客户端角色,HostB充当服务器角色。
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN,ACK。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
第一次握手:建立连接时,HostA发送SYN包(SEQ=a)到HostB,并进入SYN_SEND状态,等待HostB确认。
第二次握手:HostB收到SYN包后,必须确认HostA的SYN(ACK=a+1),同时自己也送一个SYN包(SEQ=b),即SYN+ACK包,此时HostB进入SYN_RECV状态。
第三次握手:HostA收到HostB的SYN+ACK包,向HostB发送确认包ACK(ACK=b+1),此包发送完毕,HostA和HostB进入入Established状态,完成三次握手。
MyProgramSetup
1.1将打包的文件放在一个目录中 myProgramData dir /B /S /A-D myProgramData > myProgramData.txt
1.2查看txt内容 type myProgramData.txt
1.3运行makecab,将 myProgramData.txt做为指导文件,生成cab文件
BitmapDisplay
readMyDoc
BMP图像文件由三部分组成:位图文件头数据结构,它包含BMP图像文件的类型、显示内容等信息;位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息。
程序主要功能:
1) 读取位图,并提取其位图数据
2) 保存位图为磁盘文件
3) 读取位图并显示在VC界面上
Dalvik 指令集 for2010
Dalvik 指令集 for2010
SystemPanel
m_niconData.cbSize=sizeof(NOTIFYICONDATA);
m_niconData.hWnd=GetSafeHwnd();
m_niconData.uID=0;
m_niconData.hIcon=this->m_hIcon;
m_niconData.uFlags=NIF_ICON|NIF_TIP|NIF_MESSAGE;
m_niconData.uCallbackMessage=WM_COMMAND;
CString strTitle=_T("系统托盘程序测试");
_tcscpy_s(this->m_niconData.szTip,sizeof(this->m_niconData.szTip)-1,strTitle); //设置提示文本
Shell_NotifyIcon(NIM_ADD,&this->m_niconData);
Qt5编译mysql
Qt: Qt5.1.1
Mysqlserver 版本:mySQL-5.5.30-win32
wininet api
/*
说明:
代码来源:windows program design(5th)--charpter23
功能:
a.访问FTP
b.下载文件到本地
c.读取本地文件内容并显示
*/
程序可以正常使用