void MyExtension::Start()
{
...
if (NS_FAILED(threadManager->NewThread(0,
getter_AddRefs(m_WorkingThread))))
{
throw;
}
m_WorkingThread->Dispatch(this, nsIThread::DISPATCH_NORMAL);
...
}
void MyExtension::OnDataReceived(void* p)
{
SetEvent(((MyExtension*)p)->m_ThreadEvent);
}
NS_IMETHODIMP MyExtension::Run()
{
WCHAR szName[256];
memset(szName, 0, sizeof(szName));
_ltow((long)this, szName, 10);
m_ThreadEvent = CreateEvent(NULL, FALSE, FALSE, szName);
ResetEvent(m_ThreadEvent);
m_pProcessor->AttachCallback(this, &Handler::OnDataReceived);
m_sMime.Assign(m_pProcessor->Start());
UINT32 nTimeoutCount = 0;
while (WaitForSingleObject(m_ThreadEvent, 1000) ==
WAIT_TIMEOUT)
{
nTimeoutCount++;
if (nTimeoutCount == 120)
return NS_ERROR_FAILURE;
}
m_pProcessor->Finish();
m_pProcessor->GetDataAndClear((void**)&m_pData,
&m_DataLength);
delete m_pProcessor;
m_pProcessor = NULL;
return NS_OK;
}
what's wrong here ?