tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1256
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    PaRoX PaRoX ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    11
    Hallo allerseits,

    mich quält gerade folgendes Problem:

    Ich schreibe zur Zeit eine VCL-Anwendung zur Ansteuerung einer Digitalkamera. Die damit verbundenen Bibliotheken verwenden Callbackfunktionen. Wenn ich also beispielsweise ein Bild schiesse, rufe ich dazu die Funktion Capture(..) auf. Die dll ruft dann praktischerweise zurück, indem sie die Funktion ImageReady(..) aufruft, um mitzuteilen, dass das Bild heruntergeladen werden kann.

    Jetzt möchte ich aber viele Bilder hintereinander schiessen .. am liebsten mit einer for-Schleife:

    Code :
    1
    2
    3
    4
    5
    
    for (int i=0; i<10; i++) 
    {
    Capture(..);
    Sleep(2000); // Warten bis Bild fertig ist .. funktioniert nicht, da Single-Thread
    }

    Bei der for-Schleife kommt die Kamera natürlich nicht hinterher. Ich weiss gar nicht, ob ImageReady überhaupt aufgerufen wird, oder ob zuerst die for-Schleife abgearbeitet wird.

    Ich würde ja einfach mit Sleep warten bis die Kamera wieder bereit ist, aber da meine Anwendung Single-Thread ist, passiert in der Zwischenzeit nichts .. die Anwendung widmet sich voll und ganz dem Schlaf.

    Wie kann ich das Problem möglichst einfach und zügig lösen?

    Vielen Dank schon mal

    PaRoX
    Geändert von PaRoX (10.12.08 um 16:07 Uhr) Grund: 4 Buchstaben eines 5-Buchstabenwortes vergessen... :-)
     

  2. #2
    Supa Supa ist offline Mitglied Gold
    Registriert seit
    Jul 2004
    Ort
    Velbert
    Beiträge
    160
    Hy,

    kannst du ImageReady() nicht überschreiben? Dann lös doch dort einfach nochmal Capture() aus. So stellst du sicher, das die Bearbeitung des ersten Bildes auch vollständig ist.

    mfg
     
    noch 'n bischen Werbung in eigener Sache: www.ice-only.de

  3. #3
    PaRoX PaRoX ist offline Mitglied
    Registriert seit
    Nov 2008
    Beiträge
    11
    Hmmh ..

    also ImageReady ist ja eine Funktion in meinem Code. Die Kamera-dll ruft nur eben diese Funktion auf, sobald das Bild heruntergeladen werden kann.

    so sieht ImageReady aus ..

    Code :
    1
    2
    3
    4
    5
    6
    
    LONG32 CALLBACK ImageReady(ULONG32 lCam, ULONG32 ulObjHandle, void* pParam)
    {
        LONG32 lRet = 0;
        lRet = DownloadImage(lCam, ulObjHandle);
        return lRet;
    }

    und DownloadImage gibt es nur im Pseudocode ..

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    LONG32 DownloadImage(ULONG32 lCam, ULONG32 ulObjHandle)
    {
        LONG32 lRet = 0;
            
            // ... Lade Bild herunter ..
     
        return lRet;
    }


    Die prozedurale Reihenfolge schaut so aus:

    Capture-Befehl an Kamera-dll -> Kamera-dll ruft ImageReady auf (Callback) -> ImageReady ruft DownloadImage auf ( Bild wird heruntergeladen ) -> fertig

    Zum Aufruf von Capture:
    Ich schätze du meinst ich sollte die Funktion nochmals aufrufen sobald das Bild heruntergeladen wurde .. also in meinem Fall in DownloadImage. Ich denke das werde ich mal probieren.
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 11.02.09, 12:31
  2. Callback Funktion programmieren
    Von chefsalat- im Forum VisualStudio & MFC
    Antworten: 5
    Letzter Beitrag: 01.06.07, 10:06
  3. DLL: Globale Variable in CallBack Funktion verwenden
    Von KaiAusDerKiste2000 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 13.01.06, 11:12
  4. While Schleife mit SQL Funktion
    Von SaschaW im Forum PHP
    Antworten: 5
    Letzter Beitrag: 29.12.05, 01:14
  5. Callback Funktion?
    Von Funjoy im Forum PHP
    Antworten: 0
    Letzter Beitrag: 30.12.04, 17:14