Build fix.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31903 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2005-02-10 21:14:55 +00:00
parent 2376eee248
commit 1c6dd11c98

View File

@@ -153,10 +153,10 @@ static WSAEnumNetworkEventsFunc gs_WSAEnumNetworkEvents = NULL;
/* This structure will be used to pass data on to the thread that handles socket events. /* This structure will be used to pass data on to the thread that handles socket events.
*/ */
typedef struct thread_data{ typedef struct thread_data{
HWND hEvtWin; HWND hEvtWin;
unsigned long msgnumber; unsigned long msgnumber;
unsigned long fd; unsigned long fd;
unsigned long lEvent; unsigned long lEvent;
}thread_data; }thread_data;
#endif #endif
@@ -170,120 +170,122 @@ static HMODULE gs_wsock32dll = 0;
*/ */
DWORD WINAPI SocketThread(LPVOID data) DWORD WINAPI SocketThread(LPVOID data)
{ {
WSANETWORKEVENTS NetworkEvents; WSANETWORKEVENTS NetworkEvents;
thread_data* d = (thread_data *)data; thread_data* d = (thread_data *)data;
HANDLE NetworkEvent = gs_WSACreateEvent(); HANDLE NetworkEvent = gs_WSACreateEvent();
gs_WSAEventSelect(d->fd, NetworkEvent, d->lEvent); gs_WSAEventSelect(d->fd, NetworkEvent, d->lEvent);
while(socket_running) while(socket_running)
{ {
if ((gs_WSAWaitForMultipleEvents(1, &NetworkEvent, FALSE,INFINITE, FALSE)) == WAIT_FAILED) if ((gs_WSAWaitForMultipleEvents(1, &NetworkEvent, FALSE,INFINITE, FALSE)) == WAIT_FAILED)
{ {
printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError()); printf("WSAWaitForMultipleEvents failed with error %d\n", WSAGetLastError());
return 0; return 0;
} }
if (gs_WSAEnumNetworkEvents(d->fd ,NetworkEvent, &NetworkEvents) == SOCKET_ERROR) if (gs_WSAEnumNetworkEvents(d->fd ,NetworkEvent, &NetworkEvents) == SOCKET_ERROR)
{ {
printf("WSAEnumNetworkEvents failed with error %d\n", WSAGetLastError()); printf("WSAEnumNetworkEvents failed with error %d\n", WSAGetLastError());
return 0; return 0;
} }
long flags = NetworkEvents.lNetworkEvents; long flags = NetworkEvents.lNetworkEvents;
if (flags & FD_READ) if (flags & FD_READ)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_READ); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_READ);
if (flags & FD_WRITE) if (flags & FD_WRITE)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_WRITE); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_WRITE);
if (flags & FD_OOB) if (flags & FD_OOB)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_OOB); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_OOB);
if (flags & FD_ACCEPT) if (flags & FD_ACCEPT)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_ACCEPT); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_ACCEPT);
if (flags & FD_CONNECT) if (flags & FD_CONNECT)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CONNECT); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CONNECT);
if (flags & FD_CLOSE) if (flags & FD_CLOSE)
::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CLOSE); ::PostMessage(d->hEvtWin, d->msgnumber,d->fd, FD_CLOSE);
} }
gs_WSAEventSelect(d->fd, NetworkEvent, 0); gs_WSAEventSelect(d->fd, NetworkEvent, 0);
ExitThread(0); ExitThread(0);
return 0; return 0;
} }
#endif #endif
bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop() bool GSocketGUIFunctionsTableConcrete::CanUseEventLoop()
{ return true; } {
return true;
}
/* Global initializers */ /* Global initializers */
bool GSocketGUIFunctionsTableConcrete::OnInit() bool GSocketGUIFunctionsTableConcrete::OnInit()
{ {
static LPCTSTR pclassname = NULL; static LPCTSTR pclassname = NULL;
int i; int i;
/* Create internal window for event notifications */ /* Create internal window for event notifications */
hWin = wxCreateHiddenWindow(&pclassname, CLASSNAME, _GSocket_Internal_WinProc); hWin = wxCreateHiddenWindow(&pclassname, CLASSNAME, _GSocket_Internal_WinProc);
if (!hWin) if (!hWin)
return false; return false;
/* Initialize socket list */ /* Initialize socket list */
InitializeCriticalSection(&critical); InitializeCriticalSection(&critical);
for (i = 0; i < MAXSOCKETS; i++) for (i = 0; i < MAXSOCKETS; i++)
{ {
socketList[i] = NULL; socketList[i] = NULL;
} }
firstAvailable = 0; firstAvailable = 0;
/* Load WSAAsyncSelect from wsock32.dll (we don't link against it /* Load WSAAsyncSelect from wsock32.dll (we don't link against it
statically to avoid dependency on wsock32.dll for apps that don't use statically to avoid dependency on wsock32.dll for apps that don't use
sockets): */ sockets): */
#ifndef __WXWINCE__ #ifndef __WXWINCE__
gs_wsock32dll = LoadLibrary(wxT("wsock32.dll")); gs_wsock32dll = LoadLibrary(wxT("wsock32.dll"));
if (!gs_wsock32dll) if (!gs_wsock32dll)
return false; return false;
gs_WSAAsyncSelect =(WSAAsyncSelectFunc)GetProcAddress(gs_wsock32dll, gs_WSAAsyncSelect =(WSAAsyncSelectFunc)GetProcAddress(gs_wsock32dll,
wxT("WSAAsyncSelect")); "WSAAsyncSelect");
if (!gs_WSAAsyncSelect) if (!gs_WSAAsyncSelect)
return false; return false;
#else #else
/* On WinCE we load ws2.dll which will provide the needed functions. /* On WinCE we load ws2.dll which will provide the needed functions.
*/ */
gs_wsock32dll = LoadLibrary(wxT("ws2.dll")); gs_wsock32dll = LoadLibrary(wxT("ws2.dll"));
if (!gs_wsock32dll) if (!gs_wsock32dll)
return false; return false;
gs_WSAEventSelect =(WSAEventSelectFunc)GetProcAddress(gs_wsock32dll, gs_WSAEventSelect =(WSAEventSelectFunc)GetProcAddress(gs_wsock32dll,
wxT("WSAEventSelect")); wxT("WSAEventSelect"));
if (!gs_WSAEventSelect) if (!gs_WSAEventSelect)
return false; return false;
gs_WSACreateEvent =(WSACreateEventFunc)GetProcAddress(gs_wsock32dll, gs_WSACreateEvent =(WSACreateEventFunc)GetProcAddress(gs_wsock32dll,
wxT("WSACreateEvent")); wxT("WSACreateEvent"));
if (!gs_WSACreateEvent) if (!gs_WSACreateEvent)
return false; return false;
gs_WSAWaitForMultipleEvents =(WSAWaitForMultipleEventsFunc)GetProcAddress(gs_wsock32dll, gs_WSAWaitForMultipleEvents =(WSAWaitForMultipleEventsFunc)GetProcAddress(gs_wsock32dll,
wxT("WSAWaitForMultipleEvents")); wxT("WSAWaitForMultipleEvents"));
if (!gs_WSAWaitForMultipleEvents) if (!gs_WSAWaitForMultipleEvents)
return false; return false;
gs_WSAEnumNetworkEvents =(WSAEnumNetworkEventsFunc)GetProcAddress(gs_wsock32dll, gs_WSAEnumNetworkEvents =(WSAEnumNetworkEventsFunc)GetProcAddress(gs_wsock32dll,
wxT("WSAEnumNetworkEvents")); wxT("WSAEnumNetworkEvents"));
if (!gs_WSAEnumNetworkEvents) if (!gs_WSAEnumNetworkEvents)
return false; return false;
currSocket = 0; currSocket = 0;
#endif #endif
return true; return true;
} }
void GSocketGUIFunctionsTableConcrete::OnExit() void GSocketGUIFunctionsTableConcrete::OnExit()
{ {
#ifdef __WXWINCE__ #ifdef __WXWINCE__
/* Delete the threads here */ /* Delete the threads here */
for(unsigned int i=0; i < currSocket; i++) for(unsigned int i=0; i < currSocket; i++)
CloseHandle(hThread[i]); CloseHandle(hThread[i]);
#endif #endif
/* Destroy internal window */ /* Destroy internal window */
DestroyWindow(hWin); DestroyWindow(hWin);
@@ -429,15 +431,15 @@ void GSocketGUIFunctionsTableConcrete::Enable_Events(GSocket *socket)
#else #else
/* /*
* WinCE creates a thread for socket event handling. * WinCE creates a thread for socket event handling.
* All needed parameters get passed through the thread_data structure. * All needed parameters get passed through the thread_data structure.
*/ */
socket_running = true; socket_running = true;
thread_data* d = new thread_data; thread_data* d = new thread_data;
d->lEvent = lEvent; d->lEvent = lEvent;
d->hEvtWin = hWin; d->hEvtWin = hWin;
d->msgnumber = socket->m_msgnumber; d->msgnumber = socket->m_msgnumber;
d->fd = socket->m_fd; d->fd = socket->m_fd;
hThread[currSocket++] = CreateThread(NULL, 0, &SocketThread,(LPVOID)d, 0, NULL); hThread[currSocket++] = CreateThread(NULL, 0, &SocketThread,(LPVOID)d, 0, NULL);
#endif #endif
} }
} }
@@ -454,9 +456,9 @@ void GSocketGUIFunctionsTableConcrete::Disable_Events(GSocket *socket)
#ifndef __WXWINCE__ #ifndef __WXWINCE__
gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0); gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0);
#else #else
//Destroy the thread //Destroy the thread
//TODO: This needs to be changed, maybe using another global event that could be triggered. //TODO: This needs to be changed, maybe using another global event that could be triggered.
socket_running = false; socket_running = false;
#endif #endif
} }
} }