Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WaitForSingleObject UND FNotifyInfo, Jobs etc. (https://www.delphipraxis.net/27919-waitforsingleobject-und-fnotifyinfo-jobs-etc.html)

NeoXan 17. Aug 2004 13:07


WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
Delphi-Quellcode:
FFinder := FindFirstPrinterChangeNotification(FPrinter, FFlags, 0, nil);
  if FFinder = INVALID_HANDLE_VALUE then
    raise Exception.Create(\'Cannot create notification object\');
  try
    while not Terminated do
      if WaitForSingleObject(FFinder, 50) = WAIT_OBJECT_0 then
      begin
        if FindNextPrinterChangeNotification(FFinder, FFlags, nil, Pointer(FNotifyInfo)) then
        begin
          Synchronize(DoNotify);
          FreePrinterNotifyInfo(FNotifyInfo);
        end;
      end;

 
  finally
    FindClosePrinterChangeNotification(FFinder);
  end;
Das Prob ist, dass schon die Notification ausgelöst wird, wenn ein neuer Job in den PrinterQueue kommt, ohne jedoch wirklich verarbeitet zu sein. Nun versuche ich schon ziemlich lange folgendes...
Ich möchte einfach dann wahlweise diesen Job (sprich den letzten oder auch der der dieses Event ausgelöst hat) zu pausieren bzw. gestatten weiterzulaufen. Gibt es da eine bessere Möglichkeit oder muss ich wenn dieses NotifyEvent ausgelöst wird noch mal eine Prozedur mit EnumJobs etc. etc. machen. Nur wie bekomme ich dann heraus, welchen Job ich schon überprüft habe und welche nicht, bzw. die Überprüfung findet statt und der Job ist aber nicht nicht wirklich in der Warteschlange???

Das eigentlich Prob ist ja, dass diese Notification ja ausgelöst ist, sobald der Job ankommt...abe noch nicht in der Warteschlange ist! D.h. jeder Versuch diesen Job dann zu löschen etc. scheitert...
Wenn ich z.B. aber ein ShowMessage nach EnumJobs einbaue und dann erst auf OK klicke, wenn der Job in der Warteschlange ist, dann klappt es?! Gibt es da nicht eine einfachere Möglichkeit...

Hoffe mich hat jemand verstanden...

mfg
NeoXan

Blutiger Anfänger 21. Aug 2004 23:36

Re: WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
Ich vermute mal, daß du bestimmte Printjobs verhindern willst. Sozusagen eine Print-Accounting-Software.

Mit Notifications wirst du da meinen Erfahrungen nach nicht weiterkommen. Und falls es tatsächlich geht, kommst du um EnumJobs nicht rum. Übrigens ist diese Methode nicht auf 9x verfügbar, wo man das ganze über Polling machen würde. Ein Beispiel existiert im PSDK.

NeoXan 22. Aug 2004 08:47

Re: WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
hmm....ok, wäre auch zu schön um wahr zu sein ;) :mrgreen:

Wie könnte man das Prob dann lösen, etwa einen vollkommen virtuellen Printer kreieren?

mfg
NeoXan


BTW: Also ich habe es doch geschafft...auf Win NT läuft es bis jetzt ohne Fehler durch...was aber heißt das nicht 20 Leute gleichzeitig einen Job senden, da könnte es glaube ich sein, dass die Application abstürtzt ;).
Wenn das Notify Object ausgelöst wird, werden halt alle Jobs mit Enum gehohlt und dann wird der letzte Überprüft und gegebenfals wieder gelöscht...Aber wie gesagt einen wirklichen Belastungstest gab es noch nicht...

Blutiger Anfänger 22. Aug 2004 10:55

Re: WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
Das ist garnicht so einfach, hatte es vor 4 Jahren mal versucht, dann aber nie wieder mangels Zeit.

Shareware-Produkt gibts hier. Müßte man höchstens schauen wie das funzt :-D
http://aranea.tucows.com/files2/pmsetup.exe

Gruß,

Oliver

PS: Die Jobs kämen nicht parallel an, selbst auf einem MP-System nicht.

NeoXan 22. Aug 2004 13:29

Re: WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
Zitat:

Zitat von Blutiger Anfänger
PS: Die Jobs kämen nicht parallel an, selbst auf einem MP-System nicht.

Was meinst du damit?

Blutiger Anfänger 22. Aug 2004 14:57

Re: WaitForSingleObject UND FNotifyInfo, Jobs etc.
 
... daß sie immer seriell ankommen, nie komplett parallel. Dein Code würde also nicht zerbrechen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz