warten



  • TheTester schrieb:

    Belli schrieb:

    [[...]
    Was soll dieser Quatsch: Ist mit Ansi-C nicht zu lösen?
    [...]

    Ist es auch nicht, im C Standard ist keinerlei Funktionalität für die Verwendung mehrere Prozesse und der Kommunkation zwischen ihnen festgelegt.

    Die Frage war ja nicht, ob das im C Standard festgelegt ist, sondern ob es mit C zu lösen ist.

    TheTester schrieb:

    Das ist bei C Sache externer Bibliotheken bzw. des Betriebssystems und das gehört eben nicht mehr zum Sprachkern von Ansi C. Die Verwendung von Funktionen die das OS zur Verfügung stellt ist eine ganz andere Sache.

    C besteht nun mal in der Hauptsache aus Funktionen. printf() und getch() würden nicht funktionieren, ohne Funktionen, die das OS zur Verfügung stellt.
    Und besteht mein Programm nicht mehr aus Ansi-C, wenn ich selbst eine Funktion schreibe, die Funktionen des OS aufruft?



  • Belli schrieb:

    TheTester schrieb:

    Belli schrieb:

    [[...]
    Was soll dieser Quatsch: Ist mit Ansi-C nicht zu lösen?
    [...]

    Ist es auch nicht, im C Standard ist keinerlei Funktionalität für die Verwendung mehrere Prozesse und der Kommunkation zwischen ihnen festgelegt.

    Die Frage war ja nicht, ob das im C Standard festgelegt ist, sondern ob es mit C zu lösen ist.

    das ändert aber aus der Aussage von TheTester nicht. Mit ANSI-C ist es nicht möglich, im ANSI C Forum wird man vergeblich nach einer Lösung suchen, denn ich könnte hier eine POSIX Lösung posten, während jemand anders eine Windows Lösung postet. Wir sind *im* ANSI-C Forum, hier geht es an sich fast auschließlich, um das was man mit ANSI-C mitteln lösen kann (oder ohne externe Bibliotheken).

    TheTester schrieb:

    C besteht nun mal in der Hauptsache aus Funktionen. printf() und getch() würden nicht funktionieren, ohne Funktionen, die das OS zur Verfügung stellt.
    Und besteht mein Programm nicht mehr aus Ansi-C, wenn ich selbst eine Funktion schreibe, die Funktionen des OS aufruft?

    Es spielt keine Rolle, ob das Betriebssystem Systemaufrufe zur Verfügung stellt oder nicht. Laut Standard ist es garantiert, dass die Funktion printf/getch so arbeiten, wie man sie kennt. Die Implementierung der C Bibliothek (z.b. gnu gcc) entscheidet, wie man printf/getch/usw implementiert. Für mich als Benutzer ist es egal, ob printf write aufruft oder nicht. Aber im Standard gibt es keine Funktionen, um solche genaue Timinganforderungen zu erfüllen, die sind eben nicht Umfang des ANSI-C Standards.



  • Okay, das heißt, wenn in meinem Programm für die WindowsPlattform die Instruktion

    CreateThread(NULL, NULL, MyThread, NULL, 0, NULL);
    

    vorkommt, dann ist das kein Ansi-C?
    Wenn das so ist, dann habt Ihr sicher recht, aber um was handelt es sich dann?



  • Bedeutet das nicht konsequenterweise, daß dann kein Programm mehr dem Ansi-C - Standard entspricht, in dem der Autor selbst entwickelte Funktionen aufruft? Denn das sind ja dann Funktionen, die es im Standard nicht gibt ...



  • Belli schrieb:

    Okay, das heißt, wenn in meinem Programm für die WindowsPlattform die Instruktion

    CreateThread(NULL, NULL, MyThread, NULL, 0, NULL);
    

    vorkommt, dann ist das kein Ansi-C?
    Wenn das so ist, dann habt Ihr sicher recht, aber um was handelt es sich dann?

    Das ist eine Funktion des WinAPI, also der Schnittstelle die dir Windows zur Verwendung von betriebssystemspezifischen Funktionen zur Verfügung stellt. Das die Schnittstelle nun ein C-kompatibles Format besitzt liegt wohl daran das Windows sicher größtenteils mit C entwickelt wurde.

    Belli schrieb:

    Bedeutet das nicht konsequenterweise, daß dann kein Programm mehr dem Ansi-C - Standard entspricht, in dem der Autor selbst entwickelte Funktionen aufruft? Denn das sind ja dann Funktionen, die es im Standard nicht gibt ...

    Nein so kann man das nicht sehen. Du kannst schreiben was du möchtest, dabei musst du dich an die Konventionen im C Standard halten um ein kompilierbares Stück Programm zu haben. Wenn du während der Entwicklung auf Funktionalität zurückgreifst die nicht mehr in der Standard C Libary enthalten ist (welche auch im C Standard erläutert wird) bewegst du dich ausserhalb des Standards und bist somit nicht mehr Ansi-C kompatibel, das gilt auch für z.B. spezielle Funktionalität die dir ein Compiler bietet, ein Bsp. wäre hier z.B. die Funktionsüberladung vom Lccwin32, das ist auch nicht im Standard hinterlegt.



  • Belli schrieb:

    Bedeutet das nicht konsequenterweise, daß dann kein Programm mehr dem Ansi-C - Standard entspricht, in dem der Autor selbst entwickelte Funktionen aufruft? Denn das sind ja dann Funktionen, die es im Standard nicht gibt ...

    es ist nur dann ANSI-C, wenn auf jedem System, wo ein C-Compiler drauf ist und nur die LIBC (also keine weitere externe Bibliotheken) vorhanden ist, kompilierbar und ausführbar ist.



  • supertux schrieb:

    es ist nur dann ANSI-C, wenn auf jedem System, wo ein C-Compiler drauf ist und nur die LIBC (also keine weitere externe Bibliotheken) vorhanden ist, kompilierbar und ausführbar ist.

    Na ... wenn das die Definition für Ansi-C ist, dann presche ich zurück und behaupte das Gegenteil.
    Ich habe das noch nie so gesehen. Das bedeutet doch dann aber, daß ich mit Ansi-C nicht viel anfangen kann.
    Nicht mal ein einfaches Windows-Fenster kann ich dann damit erstellen ...

    Na gut - Ihr habt dann wohl Recht.



  • Belli schrieb:

    [bla...]Ich habe das noch nie so gesehen. Das bedeutet doch dann aber, daß ich mit Ansi-C nicht viel anfangen kann.
    Nicht mal ein einfaches Windows-Fenster kann ich dann damit erstellen ...

    Na gut - Ihr habt dann wohl Recht.

    Tja, wenn man meint, das Programme alle ein Windows-Fenster brauchen... 🙄



  • Tachyon schrieb:

    Belli schrieb:

    [bla...]Ich habe das noch nie so gesehen. Das bedeutet doch dann aber, daß ich mit Ansi-C nicht viel anfangen kann.
    Nicht mal ein einfaches Windows-Fenster kann ich dann damit erstellen ...

    Na gut - Ihr habt dann wohl Recht.

    Tja, wenn man meint, das Programme alle ein Windows-Fenster brauchen... 🙄

    Wer meint das denn?
    Manche Programme brauchen das halt, andere brauchen einen oder mehrere Threads, wieder andere brauchen einen Timer, einen Socket ...



  • Belli schrieb:

    Tachyon schrieb:

    Belli schrieb:

    [bla...]Ich habe das noch nie so gesehen. Das bedeutet doch dann aber, daß ich mit Ansi-C nicht viel anfangen kann.
    Nicht mal ein einfaches Windows-Fenster kann ich dann damit erstellen ...

    Na gut - Ihr habt dann wohl Recht.

    Tja, wenn man meint, das Programme alle ein Windows-Fenster brauchen... 🙄

    Wer meint das denn?
    Manche Programme brauchen das halt, andere brauchen einen oder mehrere Threads, wieder andere brauchen einen Timer, einen Socket ...

    Jo, und einige kommen auch ohne das alles aus.
    Bibliotheken z.B. für so sinnlose Sachen wie digitale Signalverarbeitung oder mathematische Berechnungen...



  • Tachyon schrieb:

    Jo, und einige kommen auch ohne das alles aus.
    Bibliotheken z.B. für so sinnlose Sachen wie digitale Signalverarbeitung oder mathematische Berechnungen...

    Wiederum hat niemand behauptet, daß es keine Programme gibt, die ohne das alles auskommen.
    Dein erstes Beispiel verstehe ich allerdings nicht so recht. Digitale Signalverarbeitung hört sich so an, als ob es da um etwas spezielles, hardwareabhängiges geht, was auch nicht so recht in einen generellen Standard passt?

    Ist aber auch egal, ich habe den Eindruck, wir haben uns verstanden und sind uns ja auch im Grunde einig.



  • Belli schrieb:

    Das bedeutet doch dann aber, daß ich mit Ansi-C nicht viel anfangen kann.
    Nicht mal ein einfaches Windows-Fenster kann ich dann damit erstellen ...

    im Prinzip eine völlig korrekte Aussage. Mit ANSI C kommst du an sich nicht weit. Deshalb muss man andere Bibliotheken verwenden. Es gibt aber Bibliotheken die nur für eine bestimmte Plattform gibt (wie WinAPI) oder andere, die eine Portierung auf viele andere Plattformen haben (wie GTK, QT, usw), es gibt andere, die versuchen ANSI C zu erweitern, usw.



  • Azad schrieb:

    ...Oder ein Symbol, das sich während dem Warten bewegt ungefähr so was + plus dreht sich und der Benutzer weiß dass der Prozess gemacht wird und er warten muss.

    Danke

    Azad

    Hi!

    Viele Konsolenanwendungen simulieren ein sich drehendes Zeichen ungefähr so:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main(int argc, char *argv[])
    {
        char rotator[] = "|/-|/-\\";
        char* p = rotator;
    
        while ( 1 )
        {
            if ( !*p ) 
                    p = rotator;
            printf ( "Please wait ... %c\r", *p++ );
            Sleep( 30 );
    
        }
    
        system("PAUSE");	    
        return 0;
    }
    

    Gruß,
    B.B.



  • Hallo,

    #include <windows.h>
    

    wenn ich es einbinde, tritt ein Fehler auf.

    Ich arbeite unter Linux und benutze Eclipse mit C/C++ Unterstützung.

    Danke

    Azad



  • Azad schrieb:

    #include <windows.h>
    

    wenn ich es einbinde, tritt ein Fehler auf.

    lass das #include einfach weg, schreib sleep mit kleinem s und mach aus der 30 eine 1. dann klappts auch mit linux.
    🙂



  • -fricky- schrieb:

    Azad schrieb:

    #include <windows.h>
    

    wenn ich es einbinde, tritt ein Fehler auf.

    lass das #include einfach weg, schreib sleep mit kleinem s und mach aus der 30 eine 1. dann klappts auch mit linux.
    🙂

    nich nur #include weglassen, auch das <windows.h>, also die ganze zeile 😉

    wieson 1 statt 3ß? 😮
    is das nich zu schanell? 😕





  • Hallo an alle,

    #include <stdio.h>
      #include <stdlib.h>
    //#include <windows.h>
    
    int main(int argc, char *argv[])
    {
        char rotator[] = "|/-|/-\\";
        char* p = rotator;
    
        while ( 1 )
        {
            if ( !*p )
                    p = rotator;
            printf ( "Please wait ... %c\r", *p++ );
    //      sleep( 1 );
    
        }
    
        system("PAUSE");       
        return 0;
    }
    

    Wie oben zu sehen ist, habe ich sowohl include als auch sleep auskommentiert,weil es sonst nicht klappt. Es funktioniert zwar aber wird eine endlosse Schleife ausgeführt. Ich hätte gern gemacht, dass das Programm in bestimmter Zeit zu Ende geht.

    Vielen Dank

    Azad



  • #include <stdio.h>
     #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        char rotator[] = "|/-|/-\\";
        char* p = rotator;
        int a=0, x=20;       //Statt der 20 kannst auch eine andere Zahl nehmen.
                             //Musst du halt ein bisschen probieren ^^
    
        while ( a<x )
        {
            if ( !*p )
                    p = rotator;
            printf ( "Please wait ... %c\r", *p++ );
            sleep( 1 );      //Ich kenne mich da nicht so aus, aber es wurde
                             //doch gesagt, dass es so unter Linux geht
            a++;
        }
        //getchar();      
        return 0;
    }
    

    Funktioniert einwandfrei bei mir. Habe aber auch Windows 😛


Anmelden zum Antworten