![]() |
Frage zu Treads
Hallo leute,
ich hab ein problem mit meinem filemanager: :evil: immer wenn eine datei, die ich per shellexecute öffne, ziemlich groß ist, reagiert mein programm nicht mehr, bis diese nach langer zeit geöffnet ist. da ist mir das TThread in den sinn gekommen, aber ich neige etwas ab, dieses zu benutzen, da große fehler dabei entstehen können (steht in nem delphi buch). :warn: ist es sinnvoll (oder bringt es überhaupt etwas) einen shellexecute-befehl in einem eigenen tread zu öffnen? wenn ja, hat jemand ein beispiel? :coder: PLEASE HELP!!!! danke im vorraus. |
Re: Frage zu Treads
Delphi-Quellcode:
[EDIT=SleepyMaster]Hatte Tags vergessen[/EDIT]
procedure run;
begin Shellexecute........... end; procedure TForm1.Button1Click(Sender: TObject); var ThreadID: DWORD; ThreadHandle: THandle; begin ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@Run), nil, 0, ThreadID); if ThreadHandle<>0 then CloseHandle(ThreadHandle); end; |
Re: Frage zu Treads
DANKE!!! :hello: :thuimb:
bringt das auch dann den erhofften vorteil? :| |
Re: Frage zu Treads
Keine Ahnung! ;)
Aber teste es doch einfach mal! |
Re: Frage zu Treads
Aua, das tut weh. Und wenn ich das sehe, dann stimmt es auch, was in dem Buch drinsteht, das Threads gefährlich sind. Aber das gilt nur, wenn man nicht weiß, was man macht.
CreateThread soollte man nicht benutzen, da Zitat:
Delphi-Quellcode:
So hat sie auszusehen und nicht anders.
function Thread(p: Pointer): Integer;
Aber bevor ich hier großartig alles noch mal tippe, hier der Link zu meinem Tutorial: ![]() |
Re: Frage zu Treads
Solang es läuft mach ich mir keine Gedanken, was an meinem Quellcode falsch ist!
Aber jetzt wo du mich schon extra draufhingewiesen hast nehme ich BeginThread anstelle von CreateThread (Auch wenn ich keinen Unterschied sehe). Und ob die function jetzt so aussieht:
Delphi-Quellcode:
Oder ne procedure ist und so aussieht:
function Thread(p: Pointer): Integer;
Delphi-Quellcode:
Hat bei mir noch NIE einen Unterschied gemacht!
procedure Thread;
|
Re: Frage zu Treads
Zitat:
Delphi-Quellcode:
Aber ob Prozedur oder Funktion ist ziemlich wurscht, wenn man weiß, dass man die Rückgabe nicht benötigt. Wenn ich sowieso immer 0 zurückgeben würde, kann ich auch eine Prozedur nehmen.
function Thread(p: Pointer): DWord;
Aber i.A. schaden Fehlercodes nicht :wink: |
Re: Frage zu Treads
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Frage zu Treads
Delphi-Quellcode:
Mein XP!!! ist sau stabil
Nun ja. Und dann Schimpfen alle immer auf Microsoft, wenn Windows mal wieder abstürzt. Und keiner denkt daran, dass es eventuell gar nicht das OS war.
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Frage zu Treads
Hi SleepyMaster,
da will dir Luckie klar machen, wieso man es so machen sollte, und du beginnst sofort ihn zu attackieren. Es hat auch _niemand_ von deinem Computer geredet, sondern auf dem Computer, wo deine Programm laufen sollen. Ich wäre auch wirklich sehr dankbar, wenn ein Programm aufgrund schlechter Programmierung meinen PC abstürzen lässt... Du gehst immer von dir aus, und was ist mit anderen Leuten? Luckie wird seine Aussage nicht ohne Grund gemacht haben, du solltest auf ihn hören. so far mirage228 |
Re: Frage zu Treads
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Frage zu Treads
Zitat:
Naja, bei mir erweckte es denn anschein... aber wenn du es nicht wolltest, ist ja alles in Ordnung ;-) mfG mirage228 |
Re: Frage zu Treads
kann man eigentlich komponenten in threads umschreiben?
ich hätte nämlich so eine komponente wie die "DRAG AND DROP COMPONENT SUITE 3.7" von torry.net als thread, sodass wenn ich eine datei in den explorer ziehe, der anschließende befehl nichts mehr mit meiner anwendung zu tun hat, denn wenn ich das kontextmenü (Hierher kopieren, Abbrechen...) und während dem kopieren ich auf meiner anwendung normal weitermachen kann, ohne dass der cursor ein kopieren-cursor ist und meine anwendung "disabled" ist, bis der kopiervorgang abgeschlossen ist. :roteyes: ist sowas möglich bzw. hat jemand so ne komponente? :?: PLEASE HELP!!!! und nachträglich allen ein frohes neues jahr!! :bounce1: :bouncing4: :bounce2: :cheers: :party: |
Re: Frage zu Treads
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Frage zu Treads
schade, ich hab mit ner antwort auf meine frage gerechnet... :? :hi:
|
Re: Frage zu Treads
Ich würde meine gut gemeinten Hinweise nicht mit dem Wort "schade" abtun. :?
|
Re: Frage zu Treads
Delphi-Quellcode:
Das Prog läuft! Der Rest ist mir egal!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShellAPI, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure run; begin ShellExecute(Application.Handle,'open',PChar(Paramstr(0)),nil,nil,SW_SHOWNORMAL); end; procedure TForm1.Button1Click(Sender: TObject); var ThreadID: DWORD; ThreadHandle: THandle; begin ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@Run), nil, 0, ThreadID); if ThreadHandle<>0 then CloseHandle(ThreadHandle); end; end. |
Re: Frage zu Treads
Zitat:
Nachtrag: Jetz5t woich so manchen Source von so manchen Programm gesehen habe, was man sich auf diversen Freeware Portalen runterladen kann, läuft es mir manchmal kalt den Rücken runter, wenn ich daran denke, dass ich früher mal bedenkenlos solche Programme genutzt habe. *schüttel* |
Re: Frage zu Treads
Zitat:
naja, das hin und her mit den threads wollte nicht enden! luckie hat es ja prima erklärt und wenn er schon ein tutorial für threads macht und seine aussage nur ein kapitel eines buches bekräftigt, bin ich schon auf seiner seite. doch nach mindestens 4 posts gegeneinander reichts doch einmal :wink: und meine frage blieb nebensache. :( |
Re: Frage zu Treads
Hallo alle zusammen,
ich kann Lukie verstehen, aber was soll man machen, wer sich nicht helfen lasssen will dem wird gehilft, nur wann? Ich verwende Thread's mehr als zur Genüge in meinen Prog's und habe meine Erfahrungen damit gemacht und währe froh gewesen wenn man mir geholfen hätte. Mach weiter so Luckie, aber begib dich bitte nicht auf eine andere Ebene ... das hin und her bringt doch keinem was! Auf ein Neues ... Rumpi |
Re: Frage zu Treads
Zitat:
|
Re: Frage zu Treads
Der Heap ist ein Speicherbereich im Adressraum des Prozesses, wie der Stack auch, nur dass er etwas anders organisiert ist. Wenn ich jetzt eine multithread Anwendung habe und ein Thread schreibt etwas in den Heap und ein anderer Thread liest gerade zufälligerweise an der gleichen Adresse, kann es passieren, dass der lesende Thread die Daten in einem inkonsistenten Zustand vor findet. Threadsafe bedeutet hier, dass jegliche Zugriffe auf den Heap atomare Operationen sind. Das heißt, wenn ein Thread auf den Heap zugreift, ist er für andere gesperrt. Deswe3gen sollte man sehr vorsichtig sein, wenn man Threads nicht einfach enden läßt sondern sie abschießt. Schießt man einen Thread ab während er auf den Heap zugreift, kann es passieren, dass Heap für die anderen Threads gesperrt bleibt und sie so bis in alle Ewigkeit darauf warten auf ihn zugreifen zu dürfen. Deswegen ist er sehr wichtig, dass man Threads versteht und weiß, was man macht, wenn man sie anwendet. Mit Threads kann man Probleme sehr elegant lösen, macht man aber was falsch oder arbeitet nicht sorgfälltig kann man mit ihnen mehr Probleme bekomen, als man löst. Ein einfaches Application.Processmessage in einer Schleife wäre dann angebrachter für einen Anfänger.
|
Re: Frage zu Treads
Welche Daten sind denn im Heap abgelegt?
|
Re: Frage zu Treads
Globale Variablen zum Beispiel.
|
Re: Frage zu Treads
häng ich meine frage einfach mal hier mit dran:
würde es eine zugriffsverletzung erzeugen, wenn ich aus zwei threads gleichzeitig auf eine listbox, aber auf unterschiedliche items zugreife? und: werden, wennn sich ein thread in einer critical section befindet, alle threads blockiert (wies in martin strohals tut steht) oder nur die, die in die critical section wollen? *MFG* |
Re: Frage zu Treads
Zitat:
Zitat:
|
Re: Frage zu Treads
thx
|
Re: Frage zu Treads
Kann man CS's eigentlich auch vom Hauptprogramm auch in Anspruch nehmen lassen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz