Download the latest libevent, currently
Libevent-2.0.21-stable.tar.gz
Modify "D:\libevent-2.0.21-stable\event_iocp.c", "D:\libevent-2.0.21-stable \evthread_win32.c", "d:\ Libevent-2.0.21-stable\listener.c "Three files, add one line at the beginning of the file:
#define _WIN32_WINNT 0x0500
Add the/ZI option to the cflags in Makefile.nmake and remove the/ox optimization option so that the generated Lib library will have debug information
Enter the VS2010 command prompt
Switch to the directory where Libevent is located
nmake/f Makefile.nmake
Compile successful Build
Libevent.lib, Libevent_core.lib, Libevent_extras.lib
Copy include and Libs
mkdir D:\libevent\include\
xcopy/e/h/r d:\libevent-2.0.21-stable\include\* D:\libevent\include\
xcopy/e/h/r d:\libevent-2.0.21-stable\win32-code\* D:\libevent\include\
xcopy/e/h/r d:\libevent-2.0.21-stable\*.h D:\libevent\include\
mkdir D:\libevent\libs
Copy D:\libevent-2.0.21-stable\*.lib D:\libevent\libs\
Create a new VS2010 console project and use the following code
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 6667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611 7118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
// libeventTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
/*
* XXX This sample code was once meant to show how to use the basic Libevent
* interfaces, but it never worked on non-Unix platforms, and some of the
* interfaces have changed since it was first written. It should probably
* be removed or replaced with something better.
*
* Compile with:
* cc -I/usr/local/include -o event-test event-test.c -L/usr/local/lib -levent
*/
#include <event2/event-config.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifndef WIN32
#include <sys/queue.h>
#include <unistd.h>
#include <sys/time.h>
#else
#include <winsock2.h>
#include <windows.h>
#endif
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <event.h>
static
void
fifo_read(
int
fd,
short event,
void
*arg)
{
char
buf[255];
int
len;
struct
event *ev = (
struct
event *)arg;
#ifdef WIN32
DWORD
dwBytesRead;
#endif
/* Reschedule this event */
event_add(ev, NULL);
fprintf
(stderr,
"fifo_read called with fd: %d, event: %d, arg: %p\n"
,
fd, event, arg);
#ifdef WIN32
len = ReadFile((
HANDLE
)fd, buf,
sizeof
(buf) - 1, &dwBytesRead, NULL);
/* Check for end of file. */
if
(len && dwBytesRead == 0) {
fprintf
(stderr,
"End Of File"
);
event_del(ev);
return
;
}
buf[dwBytesRead] =
‘\0‘
;
#else
len = read(fd, buf,
sizeof
(buf) - 1);
if
(len == -1) {
perror
(
"read"
);
return
;
}
else
if
(len == 0) {
fprintf
(stderr,
"Connection closed\n"
);
return
;
}
buf[len] =
‘\0‘
;
#endif
fprintf
(stdout,
"Read: %s\n"
, buf);
}
int
main(
int
argc,
char
**argv)
{
struct
event evfifo;
#ifdef WIN32
HANDLE
socket;
/* Open a file. */
socket = CreateFileA(
"test.txt"
,
/* open File */
GENERIC_READ,
/* open for reading */
0,
/* do not share */
NULL,
/* no security */
OPEN_EXISTING,
/* existing file only */
FILE_ATTRIBUTE_NORMAL,
/* normal file */
NULL);
/* no attr. template */
if
(socket == INVALID_HANDLE_VALUE)
return
1;
#else
struct
stat st;
const
char
*fifo =
"event.fifo"
;
int socket;
if
(lstat(fifo, &st) == 0) {
if
((st.st_mode & S_IFMT) == S_IFREG) {
errno
= EEXIST;
perror
(
"lstat"
);
exit
(1);
}
}
unlink(fifo);
if
(mkfifo(fifo, 0600) == -1) {
perror
(
"mkfifo"
);
exit
(1);
} /* Linux pipes are broken, we need O_RDWR instead of O_RDONLY */
#ifdef __linux
socket = open(fifo, O_RDWR | O_NONBLOCK, 0);
#else
socket = open(fifo, O_RDONLY | O_NONBLOCK, 0);
#endif
if
(socket == -1) {
perror
(
"open"
);
exit
(1);
}
fprintf
(stderr,
"Write data to %s\n"
, fifo);
#endif
/* Initalize the event library */
event_init(); /* Initalize one event */
#ifdef WIN32
event_set(&evfifo, (
int
)socket, EV_READ, fifo_read, &evfifo);
#else
event_set(&evfifo, socket, EV_READ, fifo_read, &evfifo);
#endif
/* Add it to the active events, without a timeout */
event_add(&evfifo, NULL);
event_dispatch();
#ifdef WIN32
CloseHandle(socket);
#endif
return
(0);
}
|
Go to Configuration Manager, set the active item to release
C + + General \ Additional Include directories. \include;. \include\event2
Code generation \ Runtime Multithreading (/MT)
Advanced \ Compile to compile to C code (/TC)
Linker
General \ Additional Library directory. \libs
Input \ Additional Dependencies ws2_32.lib;wsock32.lib;libevent.lib;libevent_core.lib;libevent_extras.lib;% ( Additionaldependencies)
Enter \ Ignore specific default library libc.lib;msvcrt.lib;libcd.lib;libcmtd.lib;msvcrtd.lib;% ( Ignorespecificdefaultlibraries)
haven2002 annotations: No need to ignore or nothing.
Under the Include folder, you can include the Event2 folder and a bunch of. h files. Using the above command, copy a bunch of useless things.
Windows compiler Libevent