Bedeutung von Threads



  • Hallo,

    ich bin noch nicht so erfahren mit threads, in der Hilfe steht nicht viel verständliches drin und in dem Buch das ich habe von Richard Kaiser steht auch nichts über Threads. Hat jemand einen Tip?

    Ansonsten eine kurze Frage.

    Ich kann im Builder einen Thread über Datei und Neu erstellen und ihn dann auf, z.B. ButtonClick starten. Ich würde diesen Thread dann gerne starten und dauerhaft auf Zeichen über die serielle Schnittstelle warten. Kann ich im Thread eine Abfrage einbauen, die ständig auf Zeichen von der seriellen Schnittstelle wartet und einen zweiten Thread der eingehende Zeichen auswertet, zudem soll das Programm nebenbei weiter ausführbar bzw. verfügbar sein?

    Gruß thready



  • also, ich erstell meine threads immer so: (da gibt es glaube ich mehrere möglichkeiten)

    erstmal variablen:

    unsigned long WINAPI ThreadName();
    HANDLE hThreadName;
    DWORD threadID_ThreadName;
    
    unsigned long WINAPI ThreadName()
    {
    /// hier ist der code für den thread (was gemacht werden soll)
    }
    

    dann das ding ausführen:

    Button1->OnClick (oder so)
    
    ThreadName = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadName, NULL, NULL, &threadID_ThreadName);
    

    wenn du das ding beenden willst (den thread) dann:

    DWORD exitcode;
            GetExitCodeThread(ThreadName,&exitcode);
            if(exitcode == STILL_ACTIVE)
            {
                    TerminateThread(hThreadName, 0x03);
            }
    

    // achso, bedeutung:

    ja, wenn du jetzt bei Button1->OnClick zum beispiel eine while schleife machst, die 10000 mal oder so ausgeführt wird, kannst du gar nichts mehr in dem Programm machen (hängt sich auf, bis while schleife zu ende)

    deshalb erstellt man threads, die laufen neben dem programm und halten dies nicht auf

    👍

    Tim



  • Wieso nicht einfach die VCL benutzen?

    Hab grad keinen Artikel dazu zur Hand... Setz mich vielleicht heut abend mal hin. Auf Jedenfall würd ich mal die Suchfunktion benutzen. Threads wurden hier schon öfters behandelt.

    -junix



  • Hallo,

    Danke schon mal für eure Hilfe.

    ja, wenn du jetzt bei Button1->OnClick zum beispiel eine while schleife machst, die 10000 mal oder so ausgeführt wird, kannst du gar nichts mehr in dem Programm machen (hängt sich auf, bis while schleife zu ende)

    deshalb erstellt man threads, die laufen neben dem programm und halten dies nicht auf

    Heisst das ich muß den Thread immer wieder aufrufen und terminieren, oder wie ist es gemeint, wenn ich zum Beispiel dauernd auf eichen von der seriellen Schnittstelle warten will und diese asynchron immer wieder eintreffen?

    Gruß Threday



  • Nö. Thread erstellen, im Thread warten, bis die Schnittstelle was bröselt und das dann entsprechend verarbeiten/weitergeben, etc) bei applikationsende wieder den Thread beenden. Feddich.

    -junix



  • in dem thread kannst du problemlos mit ner while schleife auf deine schnittstelle warten...

    Tim



  • Ich würde allerdings die guten Alten WaitForSingle/MultipleObject(s) - Funktionen verwenden, die sind erheblich CPU-Schonender (o;

    -junix



  • wieso sollte das schonender sein 😕

    Tim



  • Danke MASTER-Tim für die ausführliche Beschreibung .. sowas hat mich auch schon immer interessiert .. junix wäre nett, wende ein VCL Beispiel beisteuern würdest 🙂

    *neugierig wart*



  • hallo,

    http://www.fachinformatiker-ihk.de/service_docu.htm

    hier gibts artikel und jede menge beispiele zu vcl-threads...

    mfg
    murph



  • MASTER-Tim schrieb:

    wieso sollte das schonender sein 😕

    weil WaitForSingleObject die Zeit, bis was am Port passiert, an das Betriebssystem zurück,stattsinnlos im l eeren zu drehen (whileschleife)

    -junix


Anmelden zum Antworten