Problem Prozessorzugehörigkeit

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Problem Prozessorzugehörigkeit

Beitrag von satmax »

Das XBase++ Programme nur einen Prozessor können habe ich schon mitbekommen. Jetzt habe ich aber das Problem, dass alle Programme die ich mit runshell (tdRunShell) starte auch nur einen, den ersten Prozessor verwenden. Das kann ich aber auf keinen Fall brauchen. Gibt es dafür eventuell eine Lösung?
Zuletzt geändert von satmax am Do, 09. Jul 2015 10:56, insgesamt 1-mal geändert.
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Problem Prozessorzugehörigkeit

Beitrag von satmax »

Mit XBase++ habe ich es nicht geschafft bei fremden laufenden Prozessen die Prozessor Affinity umzustellen. Selbst nicht dann wenn ich ein CMD File zum starten verwendet habe.

Manuell aus dem Explorer gestartet:
start /AFFINITY F c:\dev\devsrc\prog.exe /NORUNCHECK

funktioniert und es werden 4 Prozessoren verwendet. Starte ich das gleiche via Shell aus dem XBase++ Programm wird wieder nur Prozessor 0 verwendet.

Wir haben das jetzt so lösen können, dass mein Kollege in seinen VC++ Programmen selbst beim Start die Prozessor Affinity umstellt.

Aktuell ist das für mich eines der größten Probleme von XBase++. Ein Programm das 2015 nur einen Prozessor verwenden kann. :banghead:

Das einzige das geht ist, das ich das eigene Programm auf einen anderen Prozessor legen kann.
Gruß
Markus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Problem Prozessorzugehörigkeit

Beitrag von Jan »

Markus,

Steffen (der von Alaska) hat mal erzählt, wie man das Xbase++-Programm auf einen anderen Prozessor legen kann. Das Programm läuft dann immer noch nicht verteilt auf mehreren Prozessoren, aber eben auf dem, den Du haben willst.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Problem Prozessorzugehörigkeit

Beitrag von AUGE_OHR »

satmax hat geschrieben:Aktuell ist das für mich eines der größten Probleme von XBase++. Ein Programm das 2015 nur einen Prozessor verwenden kann. :banghead:
im letzten Jahrtausend funktioniert Xbase++ v1.3x mit allen CPUs ...
wenn ich mich nicht irre wurde es nach Einführung von Threads (v1.5x ?), welche auf der selben CPU laufen, wegen Problem eingeschränkt.
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Problem Prozessorzugehörigkeit

Beitrag von satmax »

Jan hat geschrieben:Markus,

Steffen (der von Alaska) hat mal erzählt, wie man das Xbase++-Programm auf einen anderen Prozessor legen kann. Das Programm läuft dann immer noch nicht verteilt auf mehreren Prozessoren, aber eben auf dem, den Du haben willst.

Jan
Ja, das ist mir klar hilf aber nichts. Die Programme die ich Überwache sind zum Beispiel GPRS Server Tasks die hunderte Verbindungen (TCPIP/Sockets) gleichzeitig offen halten und mit mobilen Einheiten kommunizieren (in eigenen Threads). Ich habe nun ein kleines Tool in XBase++ geschrieben mit dem ich diese Programme überwache und teilweise dann auch neu starte. So ein GPRS-Task braucht dann aber 4, 8 ,16 oder mehr CPU's.

Wie geschrieben, im Moment habe ich eine Lösung, toll ist die aber nicht.

Stell dir vor hier würde nur 1 CPU verwendet:
Dateianhänge
cpu09-07-_2015_12-06-00.png
cpu09-07-_2015_12-06-00.png (171.28 KiB) 4722 mal betrachtet
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Problem Prozessorzugehörigkeit

Beitrag von AUGE_OHR »

satmax hat geschrieben:Selbst nicht dann wenn ich ein CMD File zum starten verwendet habe.

Manuell aus dem Explorer gestartet:
start /AFFINITY F c:\dev\devsrc\prog.exe /NORUNCHECK

funktioniert und es werden 4 Prozessoren verwendet. Starte ich das gleiche via Shell aus dem XBase++ Programm wird wieder nur Prozessor 0 verwendet.
versuche mal, statt CMD, die EXE mit ShellOpenFile() zu starten

Code: Alles auswählen

FUNCTION SHELLOPENFILE(cPath, cFILE )
LOCAL lSuccess
LOCAL Retvar := .F.

/*----------------------------------------------------------
  Created from ContactUs.PRG
  Posted to Alaska Generic NG 3/15/01
  By Anand K Gupta  Sun, 24 Dec 2000
----------------------------------------------------------- */
* #define SW_HIDE             0
* #define SW_NORMAL           1
* #define SW_SHOWMINIMIZED    2
* #define SW_SHOWMAXIMIZED    3
* #define SW_MAXIMIZE         3
* #define SW_SHOWNOACTIVATE   4
* #define SW_SHOW             5
* #define SW_MINIMIZE         6
* #define SW_SHOWMINNOACTIVE  7
* #define SW_SHOWNA           8
* #define SW_RESTORE          9
* #define SW_SHOWDEFAULT      10
* #define SE_ERR_NOASSOC 31

// Xbase++ Syntax
*   lSuccess := DllCall( "SHELL32.DLL"  , DLL_STDCALL, ;
*            "ShellExecuteA", AppDesktop():GetHWND(), "open", cPath+cFile,;
*            NIL, CurDir(), SW_NORMAL )  // SW_MAXIMIZE

// ot4xb Syntax
   lSuccess := @SHELL32:ShellExecuteA( AppDesktop():GetHWND(),;
                                       "open",;
                                       cPath+cFile,;
                                       0,;
                                       CurDir(),;
                                       SW_NORMAL )  // SW_MAXIMIZE

   DO CASE

   CASE lSuccess > 32                  // Aufruf erfolgreich
      Retvar := .T.

   Case lSuccess = SE_ERR_NOASSOC      // Keine verknpfte Anwendung

      // Falls ShowOpenWithDialog = True, wird der Dialog
      // "™ffnen mit" fr diese Datei angezeigt:
      // Shell "RunDLL32 shell32.dll,OpenAs_RunDLL " & Filename

// Xbase++ Syntax
*      DllCall( "SHELL32.DLL"  , DLL_STDCALL, ;
*            "OpenAs_RunDLL", AppDesktop():GetHWND(), NIL, cPath+cFile,;
*            NIL, CurDir(), SW_NORMAL )  // SW_MAXIMIZE
// ot4xb Syntax
      @SHELL32:OpenAs_RunDLL( AppDesktop():GetHWND(),;
                              0,;
                              cPath+cFile,;
                              0,;
                              CurDir(),;
                              SW_NORMAL )  // SW_MAXIMIZE

      //  Die Auswahlm”glichkeit wird als Erfolg gewertet:
      Retvar := .F.
   OTHERWISE
      // ShellExecute war erfolglos.
      // Boolean-Standardwert False zurckgeben

      Retvar := .F.
   ENDCASE

RETURN Retvar
p.s. das (32bit) Mappoint OCX läuft auch in einer Xbase++ Applikation auf allen CPUs !
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Problem Prozessorzugehörigkeit

Beitrag von satmax »

Selbes Problem, nur CPU #0

Mappoint verwende ich nicht und kann es daher nicht verifizieren.
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Problem Prozessorzugehörigkeit

Beitrag von AUGE_OHR »

satmax hat geschrieben:Manuell aus dem Explorer gestartet:
start /AFFINITY F c:\dev\devsrc\prog.exe /NORUNCHECK
hm ... wenn das geht dann versuche doch mal diese Syntax

Code: Alles auswählen

RunShell( [/C start "Convert File" /AFFINITY F "c:\dev\devsrc\prog.exe" ],'cmd.exe',.f.,.t.)
siehe mehr dazu http://www.xbaseforum.de/viewtopic.php?f=32&t=8600

p.s. auf welcher CPU läuft dein Programm was Runshell() aufruft ?
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Problem Prozessorzugehörigkeit

Beitrag von satmax »

Hallo Jimmy, geht auch nicht wird nur Processor #0 verwendet:
RunShell( [/C start "Convert File" /AFFINITY F "c:\dev\devsrc\prog.exe" ],'cmd.exe',.f.,.t.)
Mein Programm läuft auf Processor #0
Gruß
Markus
Antworten