Status ObjectBusy bei GDI+-Image-Objekt

Von: , 10.05.2010 16:48 Uhr

Hallo!

Ich habe über 15 Jahre Erfahrung mit OOP, aber wenig mit GDI+; seit Mitte Dezember habe ich ein GDI+-Projekt, wo mir aber neuerdings ein Kollege hilft: Er hat mir eine Sprite-Klasse zur Verfügung gestellt, die fast alles mit GDI+ beinhaltet, was ich brauche. Ich würde mich bzgl. dieser Microsoft-Bibliothek als leicht fortgeschritten bezeichnen.

DAS PROBLEM:
Ich habe folgenden Kode, wo ich für ein GDI+ Image-Objekt den Status ObjectBusy bekomme (siehe <<<<<<<<<<<<<<<< unten). Davor ist es immer in Ordnung (sprich Ok).

bool CTrainingItem::ShowStimuli()
{
bool bShown = false;
int t0 = Time(); // Logging time start

Ships &ships = (*DATA).GetShips();
assert(ships.size() > 0);

// NOTICE: Ship IDs start from 0, ship model IDs from 1!
for(short nShipId = 0; nShipId < (*DATA).NrOfUsedShips(); nShipId++)
{
Ship &ship = ships[nShipId];

if(ship.IsFixed())
{
bShown = ship.Draw();
}
else
{
// The moving paths' image for each wallpaper is to be used. If the ship is not placed on a path in this image, it will not move. In this
// case, it has to be re-placed.
const Wallpaper &wallpaper = (*DATA).GetCurrentWallpaper(); // <<<<<<<<<<<<<<<<
while((bShown = ship.MoveAutomaticallyOnPath(wallpaper.GetMovingPathsImage())) == false)
{
const bool bCONSIDER_LANDMARKS = (*DATA).GetLevels()[(*DATA).GetCurrentLevel()].AreLandmarksConsidered();
ship.SetValidRandomCoordinates(bCONSIDER_LANDMARKS, (*DATA).GetMinDistance(), (*DATA).GetShips(), wallpaper);
}
}
} // for

// Get stimulus start time
LOG(Time() - m_nTmsStimulusStart)
m_nTmsStimulusStart = Time();

m_fLogDraw = (float)(Time() - t0); // Register operation time
return bShown;
} // bool CTrainingItem::ShowStimuli()

Wallpaper& CData::GetCurrentWallpaper()
{
const WORD nINDEX = CurrentWallpaperId() - GetMinWallpaperId();
assert(GetWallpapers().size() > nINDEX);
const Wallpaper &wallpaper = GetWallpapers()[nINDEX];
assert(wallpaper.IsMovingPathsImageLoaded());
return GetWallpapers()[nINDEX];
}

bool Wallpaper::IsMovingPathsImageLoaded() const
{
const Status STATUS = (*m_pimgMovingPathsImage).GetLastStatus();
return (m_pimgMovingPathsImage != NULL && (*m_pimgMovingPathsImage).GetHeight()*(*m_pimgMovingPathsImage).GetWidth() > 0);
}


Im netten Internet habe ich herausgefunden, dass dies durch Threads passieren könne. Ich verwende aber selbst keine Threads. Es muss also einen anderen Grund geben.

Ich habe mit diesem Status ein Problem, weil ich ab diesem Zustand nicht mehr auf das Bild zugreifen kann. Die Methode IsMovingPathsImageLoaded() kommt nicht weit, weil es schon die Höhe des Bildes nicht mehr eruieren kann.

Vielen Dank für eure Hilfe!

2 Antworten zu dieser Frage

  1. Antwort von nach 4 Stunden 0 hilfreich
    Re: Status ObjectBusy bei GDI+-Image-Objekt

    Hiho,

    bitte diese Frage nochmals anderen Stellen.
    Bin mit GDI überhaupt nicht firm...

    Gruß,
    H.

  2. Antwort von nach 4 Stunden 0 hilfreich
    Re: Status ObjectBusy bei GDI+-Image-Objekt

    Habe mit GDI+ keine Erfahrung...

Jetzt auf diese Frage antworten.