004
26.02.2006, 22:29 Uhr
Spacelord
Hoffnungsloser Fall
|
Hallo, also soweit wie ich bisher deine Anforderungen verstanden habe sieht eine mögliche Lösung etwa so aus. Dein Konsolenprozess:
C++: |
#include <stdlib.h> #include <stdio.h> #include <windows.h> #include <process.h>
typedef unsigned(__stdcall *THREAD_FUNC)(void *) ;
void exit_func() { printf( "Hallo aus der atexit Funktion!\n" ); }
unsigned thread_func(void* param) { HANDLE hEvent = CreateEvent(NULL,FALSE,FALSE,"END_EVENT"); WaitForSingleObject(hEvent,INFINITE); printf("Prozess wird beendet!\n"); exit(7);
return 0; }
BOOL WINAPI close_handler(DWORD ctrlType) { if(ctrlType == CTRL_C_EVENT) { printf("STRG+C gedrueckt\nBeende das Programm.\n"); exit(8); return TRUE; } if(ctrlType == CTRL_CLOSE_EVENT) { printf("Close Event\nBeende das Programm.\n"); Sleep(2000); exit(9); return TRUE; } return FALSE; }
int main() { int counter = 0; unsigned threadID=0; SetConsoleCtrlHandler(close_handler,TRUE); atexit(exit_func); unsigned long res = _beginthreadex(NULL,0,(THREAD_FUNC)thread_func,NULL,0,&threadID); while(true) { printf("%d \n",counter); ++counter; Sleep(1000); } return 0; }
|
Und dein "GUI"-Prozess(der hier keiner ist,aber das tut der Sache keinen Abbruch )
C++: |
#include <stdio.h> #include <windows.h> #include <conio.h>
int main() { HANDLE hEvent = OpenEvent(EVENT_ALL_ACCESS,FALSE,"END_EVENT");
printf("Taste druecken um den Prozess zu beenden");
while(! _kbhit());
SetEvent(hEvent);
return 0; }
|
Schau es dir mal an und probier es aus.
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes. |