AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi nonVCL Programm nur einmal starten
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL Programm nur einmal starten

Ein Thema von WeTec · begonnen am 28. Jun 2004 · letzter Beitrag vom 1. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von WeTec
WeTec

Registriert seit: 28. Mai 2004
Ort: Dresden
23 Beiträge
 
#1

nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:05
Tach.

ja ich weis. Das Problem mit dem 'Programm nur einmal starten' ist schon X-mal geklärt . Aber ich will es genauso mit einem nonVCL-Programm machen. Habe aber noch nix gefunden.

hat einer ne Idee?

WeTec
"Skulpturen, die Freunde der Menschen in der Not."
Sachichimmer, alter Satz von mir.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:06
Wenn du weißt, dass das Problem schon x-mal geklärt ist, warum übernimmst du es dann nicht für nonVCL? Ich tue das immer. Sprich: [dp]"Semaphore"[/dp].
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:08
einfach die function nehmen die createmutex auruft
Delphi-Quellcode:
const
  kernel32 = 'kernel32.dll';
[...]
function _CreateMutex(lpMutexAttributes: PSecurityAttributes;
  bInitialOwner: Integer; lpName: PChar): THandle; stdcall; external kernel32 name 'CreateMutexA';
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:09
Was soll das denn? "CreateMutex" bzw. "CreateSemaphore" sind Teil der Windows-Unit. Und die gehört IMHO in ein vernünftiges nonVCL-Programm. Ansonsten musst du sehr viel selbst machen.

Man kann´s mit dem Vermeiden von Units auch übertreiben.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:15
@MathiasSimmack: Ich bin einfach davon ausgegangen das er möglichst wenig/keine weiteren units einbinden will. Aber hast schon recht, die konstanten etc. aus der windowsunit braucht man ja auch außer mann will die auch alle selbst definieren bzw. die Datentypen und records
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von WeTec
WeTec

Registriert seit: 28. Mai 2004
Ort: Dresden
23 Beiträge
 
#6

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 19:27
tja, alles schön und gut aber wo soll ich das hinschreiben?
bei mir gibts nur eine function dlgfunc(hwnd: ... und initialization will er irgendwie nicht so richtig verstehen.

seid mir nicht böse aber ich fang gerade erst an mit nonVCL.

ps: was ist eigentlich "CreateMutex" bzw. "CreateSemaphore"??
"Skulpturen, die Freunde der Menschen in der Not."
Sachichimmer, alter Satz von mir.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 20:10
Zitat von WeTec:
tja, alles schön und gut aber wo soll ich das hinschreiben?
bei mir gibts nur eine function dlgfunc(hwnd: ... und initialization will er irgendwie nicht so richtig verstehen.
Na, da wo du's in einer VCL-Anwendung auch hinmachst, in die Projektdatei gleich hinter begin. Die müsstest du ja sowieso bearbeitet haben, wenn du eine nonVCL-Anwendung hast, und bevor du dort dein Fenster registrierst, guckst du, ob eine andere Instanz da ist. Den Code findet man ja über Mathias' Link.

Zitat von WeTec:
ps: was ist eigentlich "CreateMutex" bzw. "CreateSemaphore"??
Zwei Funktionen
Ein Mutex und ein Semaphore sind Kernelobjekte und für die Multithreadsynchronization gedacht, also damit sich ein Thread nicht mit einem anderen ins Gehege kommt, was gemeinsam genutzte Variablen angeht. Ein Mutex kann dabei 2 Werte haben, "signaled" und "unsignaled", also nur zwei Stati. Ein Semaphore kann hingegen Werte zwischen 0 und einem angegebenem Maximum annehmen, erlaubt also mehreren Threads den Zugriff auf eine beschränkte Anzahl an Ressourcen.
Um nur ein Programm zu starten benutzt man einen Semaphore, um die Ressource (Prozessor) auf einen Thread zu begrenzen. Dabei bekommt der Semaphore einen Namen zugewiesen, versucht eine zweite Instanz des Programmes diesen Namen zu öffnen, gibt's 'nen Fehler, weil der Semaphore schon existiert, diesen Fehler fängt man ab und beendet sich selbst, wenn er auftritt. Die erste Instanz kann den Semaphore ohne Probleme erzeugen, die zweite stellt fest, daß ein Semaphore mit diesem Namen bereits existier und beendet sich wieder.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#8

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 20:26
Zitat von tommie-lie:
Zitat von WeTec:
tja, alles schön und gut aber wo soll ich das hinschreiben?
bei mir gibts nur eine function dlgfunc(hwnd: ... und initialization will er irgendwie nicht so richtig verstehen.
Na, da wo du's in einer VCL-Anwendung auch hinmachst, in die Projektdatei gleich hinter begin.
Nicht zwangsläufig. Es gibt auch fertige Units von anderen Entwicklern, die man lediglich einbinden muss. Die benutzen zwar grundsätzlich den gleichen Code, verwenden den aber im initialization/finalization-Teil. Hat WeTec ja auch angedeutet. Da kommt´s dann noch auf die Reihenfolge an, damit diese Unit auch als erste abgearbeitet wird.
Und genau darum schreibe ich mir die paar Zeilen Code auch lieber selbst in die Projektdatei.

@WeTec: Du redest von der Dialogfunktion, die deine Nachrichten bearbeitet. Aber in deinem Programm wird der Dialog auch noch erzeugt. Entweder über "CreateDialog" oder "DialogBox". Und davor erzeugst du den Mutex/Semaphore, prüfst ob er ggf. schon existiert. Und danach gibst du den Mutex/Semaphore wieder frei.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 20:42
Zitat von MathiasSimmack:
Nicht zwangsläufig. Es gibt auch fertige Units von anderen Entwicklern, die man lediglich einbinden muss. Die benutzen zwar grundsätzlich den gleichen Code, verwenden den aber im initialization/finalization-Teil. Hat WeTec ja auch angedeutet. Da kommt´s dann noch auf die Reihenfolge an, damit diese Unit auch als erste abgearbeitet wird.
Und genau darum schreibe ich mir die paar Zeilen Code auch lieber selbst in die Projektdatei.
So einen Aufwand würde ich dafür nichtmal machen...
Und da es wirklich nur 'ne Handvoll Zeilen sind, tippe ich das schneller, als ich die Unit suche und korrekt einbinde. Und was ich im DF oder der DP mal im vorbeischauen gesehen habe, spielte sich auch immer in der Projektdatei ab und nicht in irgendwelchen initialization-Abschnitten von Units. So um die Ecke kann ich gar nicht denken
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#10

Re: nonVCL Programm nur einmal starten

  Alt 28. Jun 2004, 20:46
Ja, is´ ja auch meine Rede. Aber ich zitiere mal:
Zitat von WeTec:
tja, alles schön und gut aber wo soll ich das hinschreiben?
bei mir gibts nur eine function dlgfunc(hwnd: ... und initialization will er irgendwie nicht so richtig verstehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:12 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