Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu Treads (https://www.delphipraxis.net/13968-frage-zu-treads.html)

silentAMD 29. Dez 2003 23:13


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.

SleepyMaster 29. Dez 2003 23:16

Re: Frage zu Treads
 
Delphi-Quellcode:
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;
[EDIT=SleepyMaster]Hatte Tags vergessen[/EDIT]

silentAMD 29. Dez 2003 23:21

Re: Frage zu Treads
 
DANKE!!! :hello: :thuimb:

bringt das auch dann den erhofften vorteil? :|

SleepyMaster 29. Dez 2003 23:23

Re: Frage zu Treads
 
Keine Ahnung! ;)

Aber teste es doch einfach mal!

Luckie 30. Dez 2003 13:27

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:

Zitat von Mein Tutorial
In einem Delphi-Programm sollten sie nie die Funktion CreateThread direkt aufrufen. Benutzen sie stattdessen die
Funktion BeginThread. Grund: BeginThread kapselt zwar nur die API-Funktion CreateThread, setzt aber zusätzlich
noch die globale Variable IsMultiThread und macht somit den Heap thread-sicher.

Dann die Thread-Funktion: Das ist eine Funktion! keine Prozedur.
Delphi-Quellcode:
function Thread(p: Pointer): Integer;
So hat sie auszusehen und nicht anders.

Aber bevor ich hier großartig alles noch mal tippe, hier der Link zu meinem Tutorial: http://www.luckie-online.de/tutorials/threads/

SleepyMaster 30. Dez 2003 13:34

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:
function Thread(p: Pointer): Integer;
Oder ne procedure ist und so aussieht:
Delphi-Quellcode:
procedure Thread;
Hat bei mir noch NIE einen Unterschied gemacht!

Chewie 30. Dez 2003 13:37

Re: Frage zu Treads
 
Zitat:

Zitat von Luckie
Dann die Thread-Funktion: Das ist eine Funktion! keine Prozedur.
Delphi-Quellcode:
function Thread(p: Pointer): Integer;
So hat sie auszusehen und nicht anders.

Eigentlich empfielt Microsoft folgenden Aufbau:
Delphi-Quellcode:
function Thread(p: Pointer): DWord;
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.
Aber i.A. schaden Fehlercodes nicht :wink:

Luckie 30. Dez 2003 13:46

Re: Frage zu Treads
 
Zitat:

Zitat von SleepyMaster
Solang es läuft mach ich mir keine Gedanken, was an meinem Quellcode falsch ist!

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:

(Auch wenn ich keinen Unterschied sehe).
BeginThread setzt die globale Variable IsMultiThread auf True und macht so Zugriffe auf den Heap so threadsafe

Zitat:

Und ob die function jetzt so aussieht:
Delphi-Quellcode:
function Thread(p: Pointer): Integer;
Oder ne procedure ist und so aussieht:
Delphi-Quellcode:
procedure Thread;

Na dann versuch mal Parameter an den Thread zu übergeben.

Zitat:

Hat bei mir noch NIE einen Unterschied gemacht!
Ja, bis es zum erstenmal kracht.

SleepyMaster 30. Dez 2003 13:58

Re: Frage zu Treads
 
Delphi-Quellcode:
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.
Mein XP!!! ist sau stabil

Zitat:

BeginThread setzt die globale Variable IsMultiThread auf True und macht so Zugriffe auf den Heap so threadsafe
Aja!?!

Zitat:

Na dann versuch mal Parameter an den Thread zu übergeben.
Ich wollte bis jetzt mal noch keinem Thread einen Parameter übergeben!

Zitat:

Ja, bis es zum erstenmal kracht.
Genau! Aber vorher muss ich mir auch keine Gedanken drüber machen!

Zitat:

Solang es läuft mach ich mir keine Gedanken, was an meinem Quellcode falsch ist!
und ich finde, dass sich andere solange auch keine Gedanke über meine (nicht vorhandenen) Probleme machen söllten!

mirage228 30. Dez 2003 14:07

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz