AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

XML Zugriff + Thread

Ein Thema von Piro · begonnen am 16. Jul 2008 · letzter Beitrag vom 17. Jul 2008
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

XML Zugriff + Thread

  Alt 16. Jul 2008, 22:37
Guten Abend,

ich sitze gerade einen Problem, welches ich nicht lösen kann. Ich habe eine Prozedure, die mehrere Thread öffnet, die den Onlinestatus eines Servers überprüft und in eine XML Datei schreibt. Jeder Server hat seine eigene Datei. Somit kann es nicht zu einer Zugriffsverletzung kommen.

Ich habe mehrere Möglichkeiten ausprobiert aber es funktioniert nicht. Hier meine letzte Möglichkeit.

Fumktion des Aufrufes
Delphi-Quellcode:
procedure Tfrm_main.ServerOnlineCheckToXML;
var
 i : Integer;
 sid : String;
 Thread : MyThread;
begin
 for i := 0 to lv_server.Items.Count - 1 do
 begin
   Thread := MyThread.Create(True);
   Thread.art := 'ServerOnlineCheckToXML';
   Thread.lvid := i;
   sid := lv_server.Items[i].SubItems[0];
   Thread.sid := sid;
   Thread.server := lv_server.Items[i].Caption;
   Thread.FreeOnTerminate := True;
   Thread.Resume;
 end;
end;
Die Thread Datei
Delphi-Quellcode:
unit uThread;

interface

uses
  Classes, SysUtils, MSXML2_TLB;

type
  MyThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    procedure Execute; override;
    procedure ServerOnlineCheckToXML;
  public
    { Public-Deklarationen }
    art : String;
    lvid : Integer;
    sid : String;
    server : String;
  end;


implementation

uses Dialogs, uMain, uHostAlive, uAddServer, ComCtrls;

{ MyThread }

procedure MyThread.Execute;
begin
 try
   if art = 'ServerOnlineCheckToXMLthen
   begin
     ServerOnlineCheckToXML;
     // Synchronize(ServerOnlineCheckToXML); // Damit kommt der Fehler nicht
 except
    on e: exception do begin
      // mache hier irgendetwas mit dem Fehler.
    end;
 end;
end;

procedure MyThread.ServerOnlineCheckToXML;
var
 xmlDoc : IXMLDOMDocument2;
 curNode : IXMLDOMNode;
 status : Integer;
begin
 xmlDoc := CoDOMDocument40.Create; // Hier knallt es zur Laufzeit: CoInitialize has not been called
 xmlDoc.setProperty('NewParser', true);
 xmlDoc.load(frm_main.AppPath + SERVERDIR + sid +'.xml');
 curNode := xmlDoc.documentelement.selectSingleNode('/Server-Monitor/server[sid="'+sid+'"]');

 if IsHostAlive(Server) = True then
 begin
   curNode.selectSingleNode('status').text := '1'; //Server Online
 end
 else
 begin
   curNode.selectSingleNode('status').text := '2'; //Server Offline
 end;

 curNode.selectSingleNode('updated').text := frm_main.SetDateToStr(now) + ' ' + TimeToStr(now);
 xmlDoc.save(frm_main.AppPath + SERVERDIR + sid+'.xml');
end;

end.
Wie bekomme ich dies gelöst. Ich möchte gern die Abfrage nach dem Status und das Wegschreiben in mehren Thread realisieren, die parallel ablaufen. Aber nur mit Synchronize(ServerOnlineCheckToXML) funktioniert es aber dann werden alle Thread nacheinander angearbeitet und meine Anwendung steht für diesen Zeitraum. Sehr unpraktisch. Ich hoffe einer weiß Rat.

Danke im voraus.

Sven
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: XML Zugriff + Thread

  Alt 16. Jul 2008, 22:42
Diese Fehlermeldung ist doch eigentlich sehr aussagekräftig: CoInitialize aufrufen!
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

Re: XML Zugriff + Thread

  Alt 16. Jul 2008, 22:53
Ja schon aber ich habe keinen Plan wo und wie? Habe den Befehl einfach mal eingegeben aber ohne Erfolg.

???
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: XML Zugriff + Thread

  Alt 17. Jul 2008, 06:19
Zitat von daywalker299:
Ja schon aber ich habe keinen Plan wo und wie? Habe den Befehl einfach mal eingegeben aber ohne Erfolg.

???
Auch wenn das Problem+Lösung COM + Thread schon ca. 100 mal beschrieben wurde:

Delphi-Quellcode:
procedure MyThread.Execute;
begin
  CoInitialize(nil);
  ...
  CoUninitialize();
end;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#5

Re: XML Zugriff + Thread

  Alt 17. Jul 2008, 20:22
CoInitialize(nil); setze ich ein aber er kennt es nicht. Wo muss ich es denn initialisieren?
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

Re: XML Zugriff + Thread

  Alt 17. Jul 2008, 20:25
Sorry hatte die ActiveX Unit nicht eingebunden. Danke an alle.

Schönen Abend.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
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