windows c++使用hiredis异步操作
2017-05-02 17:49
435 查看
// TestRedis.c : 定义控制台应用程序的入口点。 // #include <stdlib.h> #include <tchar.h> #include "hiredis.h" #include "async.h" #include <adapters/ae.h> //#include "adapters/libevent.h" static aeEventLoop *loop = NULL; #pragma comment(lib, "hiredis.lib") #pragma comment(lib, "Win32_Interop.lib") //#pragma comment(lib, "libevent.lib") //#pragma comment(lib, "libevent_core.lib") //#pragma comment(lib, "libevent_extras.lib") //#pragma comment(lib, "ws2_32.lib") // 设置命令执行后的回调函数 void getCallback(redisAsyncContext *c, void *r, void *privdata) { redisReply *reply = (redisReply *)r; if (reply == NULL) return; printf("argv[%s]: %s\n", (char*)privdata, reply->str); /* Disconnect after receiving the reply to GET */ redisAsyncDisconnect(c); } //设置连接回调函数 void connectCallback(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { printf("Error: %s\n", c->errstr); return; } printf("Connected...\n"); } //设置断开连接回调函数 void disconnectCallback(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { printf("Error: %s\n", c->errstr); return; } printf("Disconnected...\n"); aeStop(loop); } void subCallback(redisAsyncContext *c, void *r, void *priv) { redisReply *reply = (redisReply*)r; if (reply == NULL) return; if (reply->type == REDIS_REPLY_ARRAY && reply->elements == 3) { if (strcmp(reply->element[0]->str, "subscribe") != 0) { printf("Received[%s] channel %s: %s\n", (char*)priv, reply->element[1]->str, reply->element[2]->str); } } } int main(int argc, char **argv) { //signal(13, SIG_IGN); //struct event_config *cfg = event_config_new(); //event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP); //struct event_base* base = event_base_new_with_config(cfg); //struct event_base* base = event_base_new(); loop = aeCreateEventLoop(1024 * 10); redisAsyncContext* redis = redisAsyncConnect("127.0.0.1", 6379); if (redis == NULL || redis->err) { redisAsyncFree(redis); return 0; } redisAeAttach(loop, redis); //redisLibeventAttach(redis, base); redisAsyncSetConnectCallback(redis, connectCallback); redisAsyncSetDisconnectCallback(redis, disconnectCallback); //redisAsyncCommand(redis, NULL, NULL, "SET key %b", argv[argc - 1], _tcslen(argv[argc - 1]));//发送set命令 //redisAsyncCommand(redis, getCallback, (char*)"end-1", "GET key");//发送get命令 redisAsyncCommand(redis, subCallback, (char*) "sub", "SUBSCRIBE foo"); //event_base_dispatch(base); aeMain(loop); //redisAsyncFree(redis); getchar(); return 0; } 预处理器定义: _OFF_T_DEFINED WIN32 LACKS_STDLIB_H _DEBUG _CONSOLE %(PreprocessorDefinitions) NO_QFORKIMPL _WIN32_WINNT=0x0501 附加包含目录: $(SolutionDir)..\deps\hiredis $(SolutionDir)..\src 入口函数必须是: int main(int argc, char **argv) 文件后缀.c 或包含头文件时加extern "C"{ } 在项目源文件中添加adlist.c ae.c zmalloc.c libevent无法使用
相关文章推荐
- Windows下安装并设置Redis,使用C++操作Redis
- WINDOWS平台下使用ACE框架的异步串口操作
- windows下使用C++操作MySQL数据库
- WINDOWS平台下使用ACE框架的异步串口操作
- Windows 8学习笔记(二十一)--C++ 文件异步操作
- windows下使用C++操作MySQL数据库
- Windows环境中使用C/C++操作SQLite
- VC------Windows关机函数,休眠函数使用大全(适用Windows所有操作平台)
- 常用的Ajax异步操作范例,使用Ajax验证用户名是否已存在
- 用c++ 操作mysql 数据库类(for linux or windows and others)
- [转自JeffreyZhao]正确使用异步操作
- 使用C++操作IIS的虚拟目录
- 转:使用eclipse(v3.01)与mingw(v3.1.0)搭建Windows下C/C++开发环境
- 使用mingw在windows下搭建c/c++ IDE简单开发环境
- 使用mingw在windows下搭建c/c++IDE环境
- 正确使用异步操作 推荐
- 使用Win32API实现Windows下异步串口通讯
- c++ 操作.ini 文件(适用平台linux windows)
- 使用Win32API实现Windows下异步串口通讯(上)
- Windows下使用Eclipse+CDT编写C/C++程序