Timingprobleme mit TThread (war: TThread)



  • Morgen Leute,
    ich bräuchte mal eure Hilfe und zwar geht es um folgendes Problem:

    ich habe einen Thread geschrieben dei eine bestimmte Zeit lang was machen soll und dann die arbeit unterbrechen soll.(kein terminate!, pause)

    das timeout beträgt so ca. 50ms,
    ich lass mir mit clock() die Zeit am Anfang der Funktion holen und bleib dann solange die 50ms noch nicht abgelaufen sind, in einer do-while Schleife hängen.
    am ende wird ebenfalls mit clock() die zeit geholt.

    leider läuft die Funktion nicht 100%ig, ich habe mal die Zeit gemessen (mit clock()) wie lange die Funktion läuft und festgestellt, dass wenn sie richtig arbeitet ca. 60ms benötigt.(ist ok kann ich mit leben) doch es gibt leider auch Zyklen die schneller vergehen als 60ms und dann funktioniert es nicht! (time= ca.30ms)

    time2=clock();
    start=clock();
    
    do{
    ReadFile(mhandel,zeiger,1,&gelesen,NULL);
    
    if (gelesen>0)
    {
    
    zeiger++;
    temp+=gelesen;
    start=clock();
    time_ende=50;
    
    }
    
    end=clock();
    if ((end-start)>=time_ende)
    {
    ClearCommError(mhandel,&error,&meine);
    if(meine.cbInQue)
    start=clock();
    }
    
    }while((end-start)<=time_ende && !Terminated);
    
    time1=clock();
    wert1=time1-time2;
    

    end-start= ist die zeit timeout
    wert1= zeit in der schleife

    vielleicht kann mir einer von euch helfen

    mfg

    Gast

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • hast du das "&& !Terminated" mal ausgeklammert?



  • ja hab ich, aber auf die Zeitdifferenz hat das keinen Einfluss, sondern nur auf das beenden des Threads!



  • Was du da grade versuchst lässt sich doch viel einfacher mit WaitForSingle/MultipleObject(s) und dem Overlapped-Betrieb des Com-Ports lösen?



  • ja ich weis, aber mein chef will das "normal" geprogt haben, damit er da im programm noch mit kommt.
    Event gesteuert ist hier noch nicht akzeptiert worden. 😞



  • Normal = State of the art
    clock dürfte übrigens reichlich ungenau sein. Hast du schon mal mit QueryPerformanceCounter und Konsorten experimentiert?
    Die Pause liesse sich übrigens auch durch ein Suspend() doch wunderbar realisieren? Dann vielleicht noch ein Timerchen das ihn bei Gelegenheit wieder resumed?



  • ja hab ich schon getestet, jedoch die Zeitdifferenz ist trotzdem vorhanden!

    ich glaube, das wenn die zeit zu kurz ist, der thread auf einmal abgearbeitet wurde und wenn die zeit länger ist, der thread von Windos unterbrochen wurde.

    kann das sein???



  • was willst du denn erreichen? warum soll der thread ne bestimmte zeit lang laufen?

    ps. schenk deinem chef nen buch ueber programmierung mit WinAPI. 🙂



  • ich soll ein Timeout Protokoll (RS232) von einer Steuerung für ein Win Tool nach bauen.

    Das mit der Event-Steuerung würde ich auch viellieber nehmen, aber naja....



  • Bist du der Entwickler oder ists dein Chef? Was ist denn die Argumentation wieso du das nicht so machen darfst wies vorgesehen ist?


Anmelden zum Antworten