Click to See Complete Forum and Search --> : [RESOLVED] thread creation


manzoor10
January 23rd, 2009, 11:46 AM
I'm getting a few errors while creating a new thread, I don't know what am I doing wrong but somethings not working properly in the Thread creation in the above code.

// ThreadedServer.cpp : main project file.

#include "stdafx.h"

using namespace System;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Collections;
using namespace System::Text;

ref class ClientHandler
{
public:
TcpClient^ clientSocket;

void RunClient()
{
// Create the stream classes
StreamReader^ readerStream = gcnew StreamReader(clientSocket->GetStream());
NetworkStream^ writerStream = clientSocket->GetStream();

String^ returnData = readerStream->ReadLine();
String^ userName = returnData;

Console::WriteLine("Welcome " + userName + " to the Server");

while (true)
{
returnData = readerStream->ReadLine();

if (returnData->IndexOf("QUIT") > -1)
{
Console::WriteLine("Bye Bye " + userName);
break;
}

Console::WriteLine(userName + ": " + returnData);
returnData += "\r\n";

array<byte>^ dataWrite = Encoding::ASCII-&gt;GetBytes(returnData);
writerStream-&gt;Write(dataWrite, 0, dataWrite-&gt;Length);
}

clientSocket-&gt;Close();
}
};

const int ECHO_PORT = 8080;

void main(void)
{
try
{
// Bind the server to the local port
TcpListener^ clientListener = gcnew TcpListener(ECHO_PORT);

// Start to listen
clientListener-&gt;Start();

Console::WriteLine("Waiting for connections...");

while (true)
{
// Accept the connection
TcpClient^ client = clientListener-&gt;AcceptTcpClient();

ClientHandler^ cHandler = gcnew ClientHandler();

cHandler-&gt;clientSocket = client;

// Create a new thread for the client
// is anything wrong here?
Thread^ clientThread = gcnew Thread(gcnew ThreadStart(cHandler, &cHandler::RunClient));
clientThread-&gt;Start();
}

clientListener-&gt;Stop();
}
catch (Exception^ e)
{
Console::WriteLine("Exception: " + e);
}
}</byte>

Here are the errors I'm getting

1&gt;.\ThreadedServer.cpp(57) : warning C4947: 'System::Net::Sockets::TcpListener::TcpListener' : marked as obsolete
1&gt; Message: 'This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead.
1&gt;.\ThreadedServer.cpp(74) : error C2825: 'cHandler': must be a class or namespace when followed by '::'
1&gt;.\ThreadedServer.cpp(74) : error C2039: 'RunClient' : is not a member of '`global namespace''
1&gt;.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1&gt;.\ThreadedServer.cpp(74) : error C3924: error in argument #2 of delegate
constructor call 'System::Threading::ThreadStart':
1&gt; pointer to member function expected
1&gt;.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1&gt;.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ';' before identifier 'RunClient'
1&gt;.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1&gt;.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1&gt;.\ThreadedServer.cpp(74) : error C2065: 'RunClient' : undeclared identifier

Any hints will be really appreciated :)

Alex F
January 24th, 2009, 02:21 AM
Thread^ clientThread = gcnew Thread(gcnew ThreadStart(cHandler, &ClientHandler::RunClient));