Connecting Tech Pros Worldwide Help | Site Map

Trouble creating a thread

 
LinkBack Thread Tools Search this Thread
  #1  
Old July 22nd, 2005, 11:24 AM
Zenon
Guest
 
Posts: n/a
Default Trouble creating a thread

Folks,
I am having a problem storing a port number read from a registry and
creating a thread, and I cannot figure out why. Here are the relevant
details:

I have a struct called SOCKET_INFO in a header file called
socketthreadcommon.h

typedef struct{
char szHost[50];
int nPort;
DWORD dwLastError;
BOOL bListening;
BOOL bCalling;
BOOL bConnected;
BOOL bAbort;
BOOL bTestWithoutSocket;
UINT nMsgSentCount;
float fHeadingInStatusMsg;

HANDLE hEventQueueNotEmpty;
MsgQueueSocketType MsgQueue[MSGQUEUEMAX];
UINT MsgQueueFreeIdx;
UINT MsgQueueUsedIdx;
} SOCKET_INFO;


I create an instance of this struct in a file called realerdlg.h

SOCKET_INFO m_ServerSocketInfo;



realerdlg.cpp sets the value of the nPort member

m_ServerSocketInfo.nPort = (int)(dwPort);




and finally, I am attempting to create a socket with the statement:

CWinThread *lpThread = AfxBeginThread(ServerSocketThread, (LPVOID)
&m_ServerSocketInfo);




The dwPort variable is correct and verified. In the
serversocketthread.cpp class, I cannot pick up the
value of nPort. The constructor there is

UINT ServerSocketThread( LPVOID lpInf )
{

SOCKADDR_IN Addr;
int AddrLen;
SOCKET_INFO* lpInfo = (SOCKET_INFO *) lpInf;
int nRetValue = 0;
CSocket ServerSocket;
BOOL bDone = FALSE;
CSocket ClientSocket;
MsgQueueSocketType MsgQueue;
int nBytes;
CRegistry Registry; // Registry object
PROGRAM_TYPE Program;

CTime CurrentTime;

}



This is code I inherited and am trying to debug... Does anyone have
any ideas?

thanks very much,

Zenon

  #2  
Old July 22nd, 2005, 11:24 AM
Petec
Guest
 
Posts: n/a
Default Re: Trouble creating a thread

Zenon wrote:[color=blue]
> Folks,
> I am having a problem storing a port number read from a registry and
> creating a thread[/color]
<snip>[color=blue]
> This is code I inherited and am trying to debug... Does anyone have
> any ideas?[/color]

Standard C++ (the topic of this group) does not support threading, so please
ask in a group dedicated to your platform.
In your case it appears to be Microsoft Windows with MFC, so
microsoft.public.vc.mfc would be a good one.

- Pete
[color=blue]
>
> thanks very much,
>
> Zenon[/color]



  #3  
Old July 22nd, 2005, 11:24 AM
Victor Bazarov
Guest
 
Posts: n/a
Default Re: Trouble creating a thread

Zenon wrote:[color=blue]
> Folks,
> I am having a problem storing a port number read from a registry and
> creating a thread, and I cannot figure out why. Here are the relevant
> details:
>
> I have a struct called SOCKET_INFO in a header file called
> socketthreadcommon.h
>
> typedef struct{
> char szHost[50];
> int nPort;
> DWORD dwLastError;
> BOOL bListening;
> BOOL bCalling;
> BOOL bConnected;
> BOOL bAbort;
> BOOL bTestWithoutSocket;
> UINT nMsgSentCount;
> float fHeadingInStatusMsg;
>
> HANDLE hEventQueueNotEmpty;
> MsgQueueSocketType MsgQueue[MSGQUEUEMAX];
> UINT MsgQueueFreeIdx;
> UINT MsgQueueUsedIdx;
> } SOCKET_INFO;
>
>
> I create an instance of this struct in a file called realerdlg.h
>
> SOCKET_INFO m_ServerSocketInfo;[/color]

Let me guess... It's a data member of some class, isn't it?
[color=blue]
> realerdlg.cpp sets the value of the nPort member
>
> m_ServerSocketInfo.nPort = (int)(dwPort);
>
>
>
>
> and finally, I am attempting to create a socket with the statement:
>
> CWinThread *lpThread = AfxBeginThread(ServerSocketThread, (LPVOID)
> &m_ServerSocketInfo);[/color]

'AfcBeginThread' is not a standard C++ function. You would be much better
off asking in a newsgroup where it's on topic, like a Windows programming
newsgroup or an MFC one...
[color=blue]
>
>
>
>
> The dwPort variable is correct and verified.[/color]

"Correct and verified" where? Before you call 'AfxBeginThread'?
[color=blue]
> In the
> serversocketthread.cpp class, I cannot pick up the
> value of nPort. The constructor there is
>
> UINT ServerSocketThread( LPVOID lpInf )
> {
>
> SOCKADDR_IN Addr;
> int AddrLen;
> SOCKET_INFO* lpInfo = (SOCKET_INFO *) lpInf;
> int nRetValue = 0;
> CSocket ServerSocket;
> BOOL bDone = FALSE;
> CSocket ClientSocket;
> MsgQueueSocketType MsgQueue;
> int nBytes;
> CRegistry Registry; // Registry object
> PROGRAM_TYPE Program;
>
> CTime CurrentTime;
>
> }
>
>
>
> This is code I inherited and am trying to debug... Does anyone have
> any ideas?[/color]

<offtopic>
The simplest idea I have is that your thread does not share the address
space with the rest of the program. When you pass in the pointer value,
it gets the pointer, but it's a pointer in a completely different area of
the process memory.
</offtopic>

Try asking in a Microsoft newsgroup, like comp.os.ms-windows.programmer.*

Victor
 

Bookmarks

Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Popular Articles

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over 220,840 network members.