Bergmann89
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 08.12.12 15:47
Hey Leute,
ich hab heute festgestellt, das meine Anwendung viele Threads ohne Aufgabe hat. Also bin ich dem mal auf den Grund gegangen und hab festgestellt, das ein SWbemService erstellt wird. Dieser erstellt 5 neue Threads, die aber nicht wieder freigegeben werden. Wie genau mach ich das? Ich will nicht, das die Thread die ganze Zeit sinnlos im Hintergrund rumliegen. Hier mal die Prozedur, in der ich den SWbemService nutze.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure GetWin32_ProcessorInfo; const WbemUser =''; WbemPassword =''; WbemComputer ='localhost'; wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : Variant; oEnum : IEnumvariant; i: Integer; begin; try try FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword); FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Processor','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; i := 0; while oEnum.Next(1, FWbemObject, nil) = 0 do begin inc(i); LogMsg(' Processor '+IntToStr(i)+' Information:');
WriteVariant(' AddressWidth: '#9#9#9, FWbemObject.Properties_.Item('AddressWidth').Value); WriteVariant(' Caption: '#9#9#9#9, FWbemObject.Properties_.Item('Caption').Value); WriteVariant(' CurrentClockSpeed: '#9#9, FWbemObject.Properties_.Item('CurrentClockSpeed').Value); WriteVariant(' Description: '#9#9#9, FWbemObject.Properties_.Item('Description').Value); WriteVariant(' ExtClock: '#9#9#9, FWbemObject.Properties_.Item('ExtClock').Value); WriteVariant(' Family: '#9#9#9#9, FWbemObject.Properties_.Item('Family').Value); WriteVariant(' Manufacturer: '#9#9#9, FWbemObject.Properties_.Item('Manufacturer').Value); WriteVariant(' MaxClockSpeed: '#9#9#9, FWbemObject.Properties_.Item('MaxClockSpeed').Value); WriteVariant(' Name: '#9#9#9#9, FWbemObject.Properties_.Item('Name').Value); WriteVariant(' NumberOfCores: '#9#9#9, FWbemObject.Properties_.Item('NumberOfCores').Value); WriteVariant(' NumberOfLogicalProcessors: '#9, FWbemObject.Properties_.Item('NumberOfLogicalProcessors').Value); WriteVariant(' Version: '#9#9#9#9, FWbemObject.Properties_.Item('Version').Value); FWbemObject := Unassigned; end; finally oEnum := Unassigned; FWbemObjectSet := Unassigned; FWMIService := Unassigned; FSWbemLocator := Unassigned; end; except on E:EOleException do LogMsg(Format('EOleException %s %x', [E.Message,E.ErrorCode])); on E:Exception do LogMsg(E.Classname + ': ' + E.Message); end; end; |
€: hab grad versucht das ganze in einen Thread auszulagern und dort zu laden, aber das hat auch nix gebracht. Die Threads die beim Laden erstellt werden sind nachwievor vorhanden
MfG & Thx Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|