Anzeigen: Delphi C++
Anzeigeeinstellungen

_beginthread

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu process.h - Index


Header-Datei

process.h

Kategorie

Prozesssteuerungsroutinen

Prototyp

unsigned long _beginthread(void (_USERENTRY *__start)(void *), unsigned __stksize, void *__arg);

Beschreibung

Startet die Ausführung eines neuen Threads.

Anmerkung:  Der Parameter start_address muss als _USERENTRY deklariert werden.

Die Funktion _beginthread erstellt und startet einen neuen Thread. Der Thread beginnt die Ausführung bei start_address.

Die Größe seines Stacks in Bytes ist stack_size. Der Stack wird vom Betriebssystem zugewiesen, nachdem die Stack-Größe auf das nächste Mehrfache von 4096 aufgerundet wurde. Dem Thread wird nur der Parameter arglist übergeben. Er kann NULL sein, muss aber angegeben werden. Die Thread-Funktion sollte enden, indem sie einfach zurückkehrt. Die Funktion _endthread wird automatisch aufgerufen. Die Funktion _endthread schließt automatisch das Handle und setzt den Rückgabewert des Threads auf Null.

Es muss statt der Thread-erstellenden API-Funktion des Betriebssystems entweder diese Funktion oder _beginthreadNT verwendet werden, weil _beginthread und _beginthreadNT die Intitialisierung durchführen, die für die korrekte Arbeitsweise der Laufzeit-Bibliotheksfunktionen erforderlich ist.

Diese Funktion ist nur in den Multithread-Bibliotheken verfügbar.

Rückgabewert

_beginthread gibt das Handle des neuen Thread zurück. Der Rückgabewert ist ein Standard-Windows-Handle, das für die API-Funktionen des Betriebssystems, etwa SuspendThread und ResumeThread verwendet werden kann..

Bei einem Fehler gibt die Funktion -1 zurück, und die globale Variable errno wird auf einen der folgenden Werte gesetzt:

EAGAIN

Too many threads (Zu viele Threads)

EINVAL

Invalid stack size (Ungültige Stack-Größe, also weniger als 16 Byte oder Null)

ENOMEM

Not enough memory (Unzureichend Speicher)



Siehe auch die Beschreibung der Win32-API-Funktion GetLastError in der MSDN-Dokumentation.

Beispiel



 /*  Verwenden Sie für dieses Beispiel die Kommandozeilenoption -tWM  (32-Bit Multi-Thread-Ziel)  */
 #include <stdio.h>
 #include <errno.h>
 #include <stddef.h>     /* _threadid-Variable */
 #include <process.h>    /* _beginthread, _endthread */
 #include <time.h>       /* time, _ctime */
 void thread_code(void *threadno)
 {
     time_t t;
     time(&t);
     printf("Executing thread number %d, ID = %d, time = %s\n",
         (int)threadno, _threadid, ctime(&t));
 
 }
 
 void start_thread(int i)
 {
     int thread_id;
 #if     defined(__WIN32__)
     if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == (unsigned long)-1)
 #else
     if ((thread_id = _beginthread(thread_code,4096,(void *)i)) == -1)
 #endif
     {
         printf("Unable to create thread %d, errno = %d\n",i,errno);
         return;
     }
     printf("Created thread %d, ID = %ld\n",i,thread_id);
 }
 int main(void)
 {
     int i;
     for (i = 1; i < 20; i++)
         start_thread(i);
     printf("Hit ENTER to exit main thread.\n");
     getchar();
     return 0;
 }



Portabilität



POSIX Win32 ANSI C ANSI C++

+

In anderen Sprachen