| 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 14: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^^
 |