Threads und Ausgaben... ??



  • Schau Dir mal CriticalSection oder Mutex an. Was anderes macht Synchronize auch nicht.

    UnEinloggbar schrieb:

    Ausgaben sollte man eigentlich in Threads vermeiden, da Ausgaben immer lange dauern und damit die Threads unnötig ausbremsen.

    Vielleicht noch zusätzlich der Hinweis, dass das nicht nur nicht nur grafische Ausgaben, sondern jegliche Übergabe von Daten von einem Thread an einen anderen betrifft.



  • hmm

    der Vorgänger von mir hat halt da die Ausgaben getätigt,
    und ich muss das Programm updaten,
    es ist sehr schwer wenn ich das in einer anderen Funktion ausgeben müsste...

    weil da so viele Variablen und Werte gesetzt werden.
    bzw ich kann gar net alles wo anders ausgeben,
    da laufen auch Zähler usw....

    ich habs auch versucht auf einen TThread umzusteigen,
    aber da hat er auch gemekert und mir fast 10000 Fehlermeldungen angezeigt,
    dann hab ich das gleich galassen.

    was müsste ich den tun, damit die VCL auch im dem Win Thread funzt ??
    wäre wohl vorerst das einfachste, oder ??



  • Versuch TThread einzusetzen. Wenn Fehler auftreten (10000 sind nicht möglich) kannst du hier im Forum nachfragen (möglichst mit Fehlermeldung und Code).

    UnEinloggbar schrieb:

    VCL-Komponenten darf man nicht direkt aus anderen Threads ansprechen. Dazu ist ein Aufruf von Synchronize notwendig, ...

    Das ist so nicht ganz richtig. Synchronize (oder CriticalSection) ist nur notwendig wenn Zugriffe auf den Hauptthread erfolgen sollen, die dessen Verhalten beeinflussen (wenn z.Bsp. etwas im Hauptfenster neu gezeichnet werden muß). Man muß sich immer im Klaren sein, dass ein Aufruf von Synchronize den Thread und Hauptthread blockiert bis die darin enthaltene Funktion abgearbeitet ist. Exzessiver Einsatz von Synchronize macht Threading sinnlos.



  • kann ich den in einem TThread mit VCL arbeiten ??

    also auch das ganze Zeug ausgeben ??



  • aber CriticalSection und Synchronize funktionieren doch auch nur in
    einem TThread oder hab ich das falsch verstanden ??



  • budili schrieb:

    kann ich den in einem TThread mit VCL arbeiten ??

    Ja , kann man

    also auch das ganze Zeug ausgeben ??

    Ja.

    aber CriticalSection und Synchronize funktionieren doch auch nur in
    einem TThread oder hab ich das falsch verstanden ??

    Synchronize ist eine Memberfunktion von TThread. TCriticalSection ist eine eigenständige Klasse und kann überall verwendet werden.



  • wäre es den grundsätzlich möglich mit TCriticalSection
    meine Labels zu überschreiben ??

    ich weiß das es vllt nicht die schönste programmierung ist,
    aber ich habe hier halt auch nicht ewig Zeit.

    Und mein Vorgänger hats so gemacht,
    hab nur die Time für nen Update,
    mehr ist leider nicht drin,
    weil das Prog sehr groß und komplex ist.



  • äm, ich hab das selber problem aber leider versteh ich das nicht wirklich hier.
    kann mir das nochmal jemand erklären?
    also um in dem Thread (ebenfalls win) etwas in einem label ausgeben zu können muss man vorher CriticalSection oder Mutex oder Synchronize aufrufen? Wie sieht die funktion genau aus? wo steht die drin? 🙄



  • Wie wärs, wenn du mal in die Hilfe zu TThread::Synchronize bzw. TCriticalSection schaust?
    Wenn du TThread verwendest, wäre Synchronize für dich am Einfachsten.



  • schau in der Hilfe nach da stehts drin.
    such einfach mal nach synchronize ....

    aber wenn du einen Win Thread hast, dann kannste die
    funktionen nicht verwenden,
    dann musst du erst aus dem Win-Thread einen TThread erzeugen.

    also ich bin bei dem Win Thread geblieben und hab
    da bissel getrickst ^^


Anmelden zum Antworten