Thread problem
Hello,
I'm trying to write a MFC-Dialog of a Dpws-Server-Client sample.
So I have the existing C sample-code, which starts a thread, but I am
not able to transform it to C++.
This is the existing c-code:
// =====================================
#include <windows.h>
#include <stdio.h>
#include "dpws.h"
/*
* IMPORTANT NOTE: This multi-thread server is supplied as an example
for studying purpose
* and does not meet the usual standards of industrial software. For
instance, threads
* should not create threads or allocate a runtime structure for every
service but implement
* pools instead.
*/
HANDLE bootThread = NULL;
static DWORD WINAPI runServer(struct dpws *);
static DWORD WINAPI serve(struct dpws *);
int initServer(struct dpws *dpws)
{
int status = dpws_server_init(dpws, NULL);
if (status)
fprintf(stderr, dpws_get_error_msg(dpws));
return status;
}
int bootServer(struct dpws *dpws)
{
bootThread = CreateThread(NULL, 0, runServer, dpws, 0, NULL);
if (bootThread == NULL) {
fprintf (stderr, "Thread Creation ERROR (%d) - bootServer()\n",
GetLastError());
return -1;
}
return 0;
}
void stopServer()
{
dpws_stop_server(1000);
// wait for the master thread to exit
WaitForSingleObject(bootThread, 2000);
CloseHandle(bootThread);
}
static DWORD WINAPI runServer(struct dpws * m_dpws)
{
HANDLE hThread;
struct dpws * s_dpws;
int status = DPWS_OK;
while (TRUE) {
/* Allocate a DPWS runtime structure for the next serve task */
s_dpws = HeapAlloc(GetProcessHeap(), 0, sizeof(struct dpws));
status = dpws_accept_thr(m_dpws, s_dpws);
if (status) {
if (status != DPWS_ERR_SERVER_STOPPED)
fprintf(stderr, dpws_get_error_msg(m_dpws));
goto exit;
}
/* spawn a new thread */ // NOTE: implement a pool instead
hThread = CreateThread(NULL, 0, serve, s_dpws, 0, NULL);
if (hThread == NULL) {
fprintf (stderr, "Thread Creation ERROR (%d) - runServer()\n",
status);
goto exit;
}
else
CloseHandle(hThread);
}
exit:
// dpws_shutdown() is performed by the DLL
return 0;
}
static DWORD WINAPI serve(struct dpws * dpws)
{
dpws_serve(dpws);
dpws_end(dpws);
HeapFree(GetProcessHeap(), 0, dpws);
return 0;
}
// =========================================================
Could anyone help me to get a MFC-C++-code that achieves the same?
Regards, Sven