제 코드가 잘못되었음을 이해시켜주세요.AfxBeginThread() + Cstring = garbage content
헤더 파일
typedef void (*pStatusCallback)(UINT code, const CString& message);
class CComunicator
{
private:
CUT_WSClient _client;
bool _shouldTerminate;
CString _serverAddress;
UINT _serverPort;
pStatusCallback _statusCallback;
UINT _ThreadFunc();
static UINT ThreadFunc(LPVOID pParam);
public:
CComunicator(const CString& serverAddress, UINT serverPort, pStatusCallback statusCallback);
~CComunicator(void);
void Start();
void Stop();
}
소스 파일
CComunicator::CComunicator(const CString& serverAddress, UINT serverPort, pStatusCallback statusCallback)
{
_serverAddress = serverAddress;
_serverPort = serverPort;
_statusCallback = statusCallback;
}
CComunicator::~CComunicator(void)
{
}
void CComunicator::Start()
{
_shouldTerminate = false;
AfxBeginThread(CComunicator::ThreadFunc, this);
}
void CComunicator::Stop()
{
_shouldTerminate = true;
}
UINT CComunicator::ThreadFunc(LPVOID pParam)
{
return ((CComunicator*)pParam)->_ThreadFunc();
}
UINT CComunicator::_ThreadFunc()
{
_statusCallback(0, _T("Connecting..."));
_client.Connect(_serverPort, _serverAddress);
_statusCallback(0, _T("Connected"));
// do here some work
_client.CloseConnection();
return 0;
}
사용
CComunicator com(_T("10.1.1.105"), 4502, ComunicatorCallback);
com.Start();
왜 방법 _ThreadFunc에서 _serverAddress에 가비지 기호가 포함되어 있습니까? _serverPort에 올바른 값이 있습니까? _serverAddress를 변경하는 사람이 없습니다.
아이디어가 있으면 Thx.
OMG, 데이비드 당신 말이 맞아요, 그 후에 방금 메인 메서드의 끝 :) 그래서 프로그램이 완료되었습니다. 고마워! – Eugen