Re: Multithread heap assertion failure(Continued)
Oh sorry, I made a mistake in the test code.
The source file is as follows:
#include <afx.h>
#include <afxmt.h>
#include <afxwin.h> // MFC core and standard components
/*
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common
Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <windows.h>
#include "iocrPage.h"*/
#include <iostream>
using namespace std;
class CTestThread: public CWinThread{
public:
long timeout;
CTestThread(){}
virtual ~CTestThread(){}
int Run(){
cout << "run..." << endl;
Sleep(timeout);
return 1;
}
BOOL InitInstance(){
cout << "init..." << endl;
/*
CoInitializeEx(NULL, COINIT_MULTITHREADED);
char szDllName[_MAX_PATH] = "fzrslib.dll";
HMODULE m_hInst = LoadLibrary(szDllName);
DWORD dwErr = GetLastError();
if (dwErr!=0) {
cout << "init error..." << endl;
return FALSE;
}
LPCreateRecogPageInstanceFun m_pCreator =
(LPCreateRecogPageInstanceFun)GetProcAddress(m_hInst,
"CreateRecogPageInstance");
GetProcAddress(m_hInst, "CreateRecogPageInstance");
IRecognizePage * m_pPage;
HRESULT m_hr = (*m_pCreator)(&m_pPage);
cout << "init ok..." << endl;*/
return TRUE;
}
int ExitInstance(){
cout << "exit inst..." << endl;
/*
if (m_pPage) {
m_pPage->ClearCurrentResult();
m_pPage->Release();
}
if (m_hInst) {
FreeLibrary((HINSTANCE)m_hInst);
}
return TRUE;
CoUninitialize();*/
return 0;
}
};
int main(){
int nWorkerNum = 2;
CTestThread * m_pThread = new CTestThread[nWorkerNum];
HANDLE * m_pThreadHandle = new HANDLE[nWorkerNum];
for(int i = 0; i < nWorkerNum; i ++){
m_pThread[i].CreateThread(CREATE_SUSPENDED);
m_pThread[i].m_bAutoDelete = FALSE;
m_pThreadHandle[i] = m_pThread[i].m_hThread;
}
m_pThread[0].timeout = 1;
m_pThread[1].timeout = 3000;
for(int i = 0; i < nWorkerNum; i ++){
m_pThread[i].ResumeThread();
}
WaitForMultipleObjects(nWorkerNum, m_pThreadHandle, FALSE, INFINITE);
cout << "here" << endl; cout.flush();
clock_t s = clock();
WaitForMultipleObjects(nWorkerNum, m_pThreadHandle, TRUE, 2500);
clock_t e = clock();
cout << "####" << (e - s) << endl;
cout << "there" << endl; cout.flush();
for(int i = 0; i < nWorkerNum; i ++){
m_pThread[i].ExitInstance();
}
delete [] m_pThreadHandle;
delete [] m_pThread;
cout << "Press any key to conitnue..." << endl;
cout.flush();
char c; cin >> c;
}