![]() |
Thread erzeugen
Ich möchte folgenden code gerne gesondert als thread laufen lassen, da bei der suche das form nicht mehr reagiert, nun ist meine frage, wie ich dies am einfachsten und schnellsten lösen könnte.
Ich möchte dazu noch sagen dass ich nicht zu bequem war im forum nach lösungsansätzen zu suchen , aber da ich jetzt seit etwa einer woche versuche etwas zu basteln und nur massenweise fehlermeldungen erhalte, bitte ich euch um eueren rat. Code:
Delphi-Quellcode:
type PNetResourceArray = ^TNetResourceArray; TNetResourceArray = array[0..100] of TNetResource; function CreateNetResourceList(ResourceType: DWord; NetResource: PNetResource; out Entries: DWord; out List: PNetResourceArray): Boolean; var EnumHandle: THandle; BufSize: DWord; Res: DWord; begin Result := False; List := Nil; Entries := 0; if WNetOpenEnum(RESOURCE_GLOBALNET, ResourceType, 0, NetResource, EnumHandle) = NO_ERROR then begin try BufSize := $4000; // 16 kByte GetMem(List, BufSize); try repeat Entries := DWord(-1); FillChar(List^, BufSize, 0); Res := WNetEnumResource(EnumHandle, Entries, List, BufSize); if Res = ERROR_MORE_DATA then begin ReAllocMem(List, BufSize); end; until Res <> ERROR_MORE_DATA; Result := Res = NO_ERROR; if not Result then begin FreeMem(List); List := Nil; Entries := 0; end; except FreeMem(List); raise; end; finally WNetCloseEnum(EnumHandle); end; end; end; procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings); procedure ScanLevel(NetResource: PNetResource); var Entries: DWord; NetResourceList: PNetResourceArray; i: Integer; begin if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try for i := 0 to Integer(Entries) - 1 do begin if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or (NetResourceList[i].dwDisplayType = DisplayType) then begin List.AddObject(NetResourceList[i].lpRemoteName, Pointer(NetResourceList[i].dwDisplayType)); end; if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then ScanLevel(@NetResourceList[i]); end; finally FreeMem(NetResourceList); end; end; begin ScanLevel(Nil); end; procedure TForm1.BitBtn2Click(Sender: TObject); begin ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items); end; |
Re: Thread erzeugen
Ruf einfach in der Thread-Funktion oder in der Execute-Methode des Thread-Objekts deine Routine auf. Du musst nur die Zugriffe auf VCL Elemente Synchronisieren.
|
Re: Thread erzeugen
Ok, ich sollte vielleicht noch dazu sagen dass ich (noch) keinerlei ahnung von thread programmiererei habe
|
Re: Thread erzeugen
Ich dachte, du hättest dich im Forum informiert. Da solltest du eiegntlich was aufgeschnappt haben. Ansonsten:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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