Guten Tag zusammen
Ich habe folgendes eigentlich simples Problem: Der VCL-Haupt-Thread sollte eine TThreadList *ThreadTaskList mit Daten abfüllen, während X Threads diese abarbeitet. <br>
Dummerweise ist *ThreadTaskList in einer neuen Unit global definiert und wird dort auch in einer neuen Klasse instanziert. Anscheinend ist dadurch der Zugriff auf das TThreadList-Objekt über die Unit hinaus (obwohl ich die Klasse TTest verwende!) nicht möglich und der VCL-Haupt-Thread bekommt immer ne EAccessViolation in der ntdll.dll (?)!
<BR><BR><B>Jetzt die Frage: Darf auf gemeinsam genutzen Speicher wirklich nicht über mehrere Units hinweg zugegriffen werden? Oder gibts dafür ne elegantere Lösung?</B>
<br><br>Hier ein Bsp. das nicht klappt:<BR>
<PRE>//----- Unit2.h -----
TThreadList *ThreadList;
class TTest
{
private:
public:
TTest(){ThreadList = new TThreadList;}
~TTest()
{
delete ThreadList;
}
void StartThreads(void)
{
//...
}
void ClearThreadList(void);
};
//----- Unit2.cpp -----
void TTest::ClearThreadList(void)
{
ThreadList->LockList();
ThreadList->Clear();
ThreadList->UnlockList();
}
//************************************************** *************************
//----- Unit1.cpp -----
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTest *Test = new TTest;
Test->ClearThreadList();
delete Test;
}</PRE><BR><BR>
Wenn ich die Methode ClearThreadList() inline in TTest deklariere klappts jedoch komischerweise!
Merci!
Gruss - Boris
Ich habe folgendes eigentlich simples Problem: Der VCL-Haupt-Thread sollte eine TThreadList *ThreadTaskList mit Daten abfüllen, während X Threads diese abarbeitet. <br>
Dummerweise ist *ThreadTaskList in einer neuen Unit global definiert und wird dort auch in einer neuen Klasse instanziert. Anscheinend ist dadurch der Zugriff auf das TThreadList-Objekt über die Unit hinaus (obwohl ich die Klasse TTest verwende!) nicht möglich und der VCL-Haupt-Thread bekommt immer ne EAccessViolation in der ntdll.dll (?)!
<BR><BR><B>Jetzt die Frage: Darf auf gemeinsam genutzen Speicher wirklich nicht über mehrere Units hinweg zugegriffen werden? Oder gibts dafür ne elegantere Lösung?</B>
<br><br>Hier ein Bsp. das nicht klappt:<BR>
<PRE>//----- Unit2.h -----
TThreadList *ThreadList;
class TTest
{
private:
public:
TTest(){ThreadList = new TThreadList;}
~TTest()
{
delete ThreadList;
}
void StartThreads(void)
{
//...
}
void ClearThreadList(void);
};
//----- Unit2.cpp -----
void TTest::ClearThreadList(void)
{
ThreadList->LockList();
ThreadList->Clear();
ThreadList->UnlockList();
}
//************************************************** *************************
//----- Unit1.cpp -----
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTest *Test = new TTest;
Test->ClearThreadList();
delete Test;
}</PRE><BR><BR>
Wenn ich die Methode ClearThreadList() inline in TTest deklariere klappts jedoch komischerweise!
Merci!
Gruss - Boris
Comment