J
John Doe
Hi,
I am trying to transform a class with some time consuming operation by
adding a thread. To be able to pass data to thread I have declared a
class ThreadParam as shown below :
class CProvisioning
{
public:
struct ThreadParam
{
ThreadParam(CProvisioning* a_pThis, const CString& a_strConfig,
CString& a_strXmlOut):
pThis(a_pThis),
strConfig( a_strConfig ),
strOut( a_strXmlOut ) {}
CProvisioning* pThis;
const CString& strConfig;
CString& strOut;
};
CProvisioning(void);
~CProvisioning(void);
static DWORD ProvisioningThr(LPVOID pvarg);
DWORD ProvisioningThr(const CString& strConfig, CString& strXmlOut);
BOOL ProcessConfigXML(const CString& strConfig, CString& strOut);
protected:
ThreadParam m_thrParam;
HANDLE m_hProvThread;
};
CProvisioning::CProvisioning(void):
m_thrParam(this, CString(_T("")), CString(_T(""))),
m_hProvThread(NULL)
{
}
The ProcessConfig method receives two strings, one holding the config
file and the other to put the result:
BOOL CProvisioning:rocessConfigXML(const CString& strConfig, CString&
strXmlOut)
{
DWORD dwRet = 0;
// Start a thread
m_thrParam = ThreadParam(this, strConfig, strXmlOut);
m_hProvThread = CreateThread(
NULL,
0,
&CProvisioning:rovisioningThr,
&m_thrParam,
0, NULL);
...
}
/*static*/
DWORD CProvisioning:rovisioningThr(LPVOID pvarg)
{
ThreadParam* pThrParam = static_cast<ThreadParam*>(pvarg);
if (pThrParam) {
CProvisioning* pThis = pThrParam->pThis;
return pThis->ProvisioningThr(pThis->m_thrParam.strConfig,
pThis->m_thrParam.strOut);
}
return -1;
}
DWORD CProvisioning:rovisioningThr(const CString& strConfig, CString&
strXmlOut)
{
// Some lengthy operations ...
return 0;
}
The problem I get is with m_thrParam = ThreadParam(this, strConfig,
strXmlOut); because I get :
error C2582: 'operator =' function is unavailable in
'CProvisioning::ThreadParam'
1) First I don't understand why I need to overload =
2) How can I fix it ?
I am trying to transform a class with some time consuming operation by
adding a thread. To be able to pass data to thread I have declared a
class ThreadParam as shown below :
class CProvisioning
{
public:
struct ThreadParam
{
ThreadParam(CProvisioning* a_pThis, const CString& a_strConfig,
CString& a_strXmlOut):
pThis(a_pThis),
strConfig( a_strConfig ),
strOut( a_strXmlOut ) {}
CProvisioning* pThis;
const CString& strConfig;
CString& strOut;
};
CProvisioning(void);
~CProvisioning(void);
static DWORD ProvisioningThr(LPVOID pvarg);
DWORD ProvisioningThr(const CString& strConfig, CString& strXmlOut);
BOOL ProcessConfigXML(const CString& strConfig, CString& strOut);
protected:
ThreadParam m_thrParam;
HANDLE m_hProvThread;
};
CProvisioning::CProvisioning(void):
m_thrParam(this, CString(_T("")), CString(_T(""))),
m_hProvThread(NULL)
{
}
The ProcessConfig method receives two strings, one holding the config
file and the other to put the result:
BOOL CProvisioning:rocessConfigXML(const CString& strConfig, CString&
strXmlOut)
{
DWORD dwRet = 0;
// Start a thread
m_thrParam = ThreadParam(this, strConfig, strXmlOut);
m_hProvThread = CreateThread(
NULL,
0,
&CProvisioning:rovisioningThr,
&m_thrParam,
0, NULL);
...
}
/*static*/
DWORD CProvisioning:rovisioningThr(LPVOID pvarg)
{
ThreadParam* pThrParam = static_cast<ThreadParam*>(pvarg);
if (pThrParam) {
CProvisioning* pThis = pThrParam->pThis;
return pThis->ProvisioningThr(pThis->m_thrParam.strConfig,
pThis->m_thrParam.strOut);
}
return -1;
}
DWORD CProvisioning:rovisioningThr(const CString& strConfig, CString&
strXmlOut)
{
// Some lengthy operations ...
return 0;
}
The problem I get is with m_thrParam = ThreadParam(this, strConfig,
strXmlOut); because I get :
error C2582: 'operator =' function is unavailable in
'CProvisioning::ThreadParam'
1) First I don't understand why I need to overload =
2) How can I fix it ?