Hi,
Ich moechte gerne eine std::vector an meinen erzeugten "Working Thread" weitergeben. Wie wandle ich den std::vector in LPVOID um?
Kann man es wirklich nicht casten? Der std::vector wird in einer Klasse CFileList erzeugt. In der Dialogklasse arbeite ich alle, zuvor initialisierten, Vektorelemente (Dateien) ab und es funktioniert ohne Probleme.
Nun passiert in dieser for-Schleife eine ganze Menge Bildverarbeitung mit hohem Zeitanspruch. Moechte fuer den Benutzer den Dialog freigeben und auch die Darstellung waehrend der Bildverarbeitungsroutine aendern.
Portiere ich die Bildverarbeitung in eine von CWinThread abgeleiteten Klasse, ist das zuvor geladene Vektorobjekt leer.
Warum ist meine Liste hier leer? Und wie kann ich an an InitInstance() Parameter uebergeben? Wenn ich ein CCompute Objeket in einer anderen Klasse erzeuge? Es kommt die Fehlermeldung: error C2248: 'CCompute::CCompute' : cannot access protected member declared in class 'CCompute' bei diesem Versuch.
Fuer Kritik, Beispielcodes, Literaturhinweis, Ratschlaege waehre ich sehr dankbar!
Gruss Rainer
Ich moechte gerne eine std::vector an meinen erzeugten "Working Thread" weitergeben. Wie wandle ich den std::vector in LPVOID um?
Kann man es wirklich nicht casten? Der std::vector wird in einer Klasse CFileList erzeugt. In der Dialogklasse arbeite ich alle, zuvor initialisierten, Vektorelemente (Dateien) ab und es funktioniert ohne Probleme.
Code:
oid CImg2Dlg::OnBnClickedROI()
{
SetTimer(1,400,NULL);
m_StartTime=CTime::GetCurrentTime();
int width,height;
if(m_Format.GetCurSel()==F512)
{
width=height=512;
}
else{
width=648;
height=572;
}
std::vector<ImgElement>::iterator listIte;
char* data=new char[width*height];
int count=0;
for(listIte=m_fList.ImgList.begin();listIte!=m_fList.ImgList.end();++listIte)
{
m_gpData.LoadFile((*listIte).name);
if(!m_ROI.FindROI(width,height))(*listIte).blink=true;
data=0;
delete[] data;
}
m_StopTime=CTime::GetCurrentTime();
m_ElapsedTime=m_StopTime-m_StartTime;
SetDlgItemInt(IDC_MIN,m_ElapsedTime.GetMinutes(),FALSE);
SetDlgItemInt(IDC_SEC,m_ElapsedTime.GetSeconds(),FALSE);
KillTimer(1);
}
Nun passiert in dieser for-Schleife eine ganze Menge Bildverarbeitung mit hohem Zeitanspruch. Moechte fuer den Benutzer den Dialog freigeben und auch die Darstellung waehrend der Bildverarbeitungsroutine aendern.
Portiere ich die Bildverarbeitung in eine von CWinThread abgeleiteten Klasse, ist das zuvor geladene Vektorobjekt leer.
Code:
BOOL CCompute::InitInstance()
{
std::vector<ImgElement>::iterator listIte;
int szco=0;
for(listIte=m_fList.ImgList.begin();listIte!=m_fList.ImgList.end();++listIte)
{
m_Processor.LoadFile((*listIte).name,width,height);
m_Processor.DoFFT(width,height);
m_Processor.Filter(width,height);
m_Processor.Threshold(width,height);
m_Processor.MorphOperation(width,height);
}
return TRUE;
}
Warum ist meine Liste hier leer? Und wie kann ich an an InitInstance() Parameter uebergeben? Wenn ich ein CCompute Objeket in einer anderen Klasse erzeuge? Es kommt die Fehlermeldung: error C2248: 'CCompute::CCompute' : cannot access protected member declared in class 'CCompute' bei diesem Versuch.
Fuer Kritik, Beispielcodes, Literaturhinweis, Ratschlaege waehre ich sehr dankbar!
Gruss Rainer