Mulithreading



  • ich weiß nicht wie ich es noch erklären soll.

    Ich fahre mit dem Motor eine bestimmte Strecke während dieser Strecke soll 100mal gemessen werden.

    Ist:
    Fahren
    Fahren fertig
    100x messen

    Soll:
    Fahren+100mal messen



  • knivil schrieb:

    servusundhallo schrieb:

    mir ist klar dass das Senden schnell geht aber das Messen wird erst nach Beendigung der Bewegung durchgeführt.. das ist mein Problem

    Naja, dass kann viele Ursachen haben. Die Loesung ist aber nicht, Threads zu nutzen, sondern erstmal das Problem zu verstehen!

    spcm_dwSetParam_i32 (stCard.hDrv, SPC_TIMEOUT, 10000); 
    //starte Karte und warte auf Interrupt: READY 
    if (spcm_dwSetParam_i32 (stCard.hDrv, SPC_M2CMD, M2CMD_CARD_START | M2CMD_CARD_ENABLETRIGGER | M2CMD_CARD_WAITREADY) == ERR_TIMEOUT)
    

    Beispielsweise sagt diese Zeile, dass es 10sec dauern kann, bis die Messkarte initialisiert ist. Auch ist es wohl unnoetig bei jeder Messung die Karte neu zu initialisieren.

    hatte ich auch schon ausgelagert (initmesskarte)
    allerdings muss der buffer gelöscht werden die funktionierte dann nichtmehr und ich hatte immer die gleichenmesswerte gespeichert
    das Timeout gibt solange wartet die karte wenn bis dahin keine rückmeldung von der Messkarte kommt wird ein Fehler ausgegeben.



  • servusundhallo schrieb:

    Fahren+100mal messen

    Ich habe es begriffen.

    Beim Funktionsaufruf ging es mir darum: Was passiert mit deiner Messung, wenn die Initialisierung 5sec dauert? Keine Ahnung, kann das nicht Testen, ist deine Hardware.



  • hi

    also ich habe eine pause eingefügt in die Fahrfunktion

    egal wie lange ich diese einstelle Messung erst nach beendigung der Fahrt(jetzt ohne Threads)

    einfach nur

    fahren();
    messen();

    aufgerufen



  • do 
            { 
                Done = GlobalDoneEvent(OmsUmxHandle); 
                GetStatusFlags(OmsUmxHandle, &StatusFlags); 
                Sleep(10); 
                TimeLimit -= 10; 
            } 
            while (!Done && ((StatusFlags & OVERTRAVEL_ERROR) != OVERTRAVEL_ERROR) && (TimeLimit > 0));
    

    Weil du in der Fahrenfunktion wartest, bis er angekommen ist.
    wie waere es mit
    starteFahren();
    solange nicht fertig, messen();

    ich sehe nur an den messerbnissen die ich über matlab ausgeben das die bilder gemacht werden wenn der motor wieder steht.

    Woher weisst du, das es Bilder nach der Fahrt waren und nicht davor?



  • ich sehe es weil die messwerte dem entsprechend sind ^^

    der Sinn dahinter ist messe() solange nicht fahrenfertig()

    andersrum würde es kollisionen geben ^^



  • Die Threads sind paralell. Wenn nicht, dann hast Du einen Messfehler.

    Beweise bitte, dass es nicht so ist. Mach mal eine kleine Testanwendung!!!!


Anmelden zum Antworten