[C] Threads erstellen?

MCX

Mitglied
Hiho,

ich programmiere zur Zeit an einer Ampelsteuerung, und dabei müssen verschiedene Ampeln gleichzeitig geschaltet werden, heißt also, mehrere Funktionen müssen gleichzeitig gestartet werden. Da diese Funktionen das System pausieren, habe ich mir gedacht, dass die einzige Möglichkeit dafür Threads wären.

Jedoch finde ich zum Thema Threads in C nicht viel im Internet. Kann mir jemand erklären, wie ich solche festlege und benutze? Oder vllt. hat jemand einen Vorschlag, wie ich 2 Funktionen gleichzeitig starten kann, die jeweils das System pausieren müssen (über eine Sleep-Funktion).


THX
MCX
 
hmm danke erstma... wie immer typisch ist das ziemlich unübersichtlich und ich weiß anhand von msdn jetzt nicht genau, was ich davon nutze und wie und was net
 
hmm mit dem alten VC++ 6.0 scheint das nicht zu funktionieren, denn es gibt dorrt keine "strsafe.h", und auch, wenn ich sie mir irgendwie besorge, läufts net. muss wohl mal 2005 testen, auch wenn da wiederum alte 6.0 funktionen teilweilse fehlen.
 
Zuletzt bearbeitet:
Hallo,

das Erstellen eines Threads ist eigentlich nicht so schwierig:
C++:
#include <windows.h>
#include <process.h>
#include <stdio.h>

unsigned int _stdcall ThreadFunction(void *param);

int main()
{
    unsigned int nThreadAddress;
    int          param = 100;

    uintptr_t hThreadHandle = _beginthreadex( 0,
                                              0,
                                              ThreadFunction,
                                              &param,
                                              0,
                                              &nThreadAddress );

    WaitForSingleObject((HANDLE)hThreadHandle, INFINITE); // Wartet auf das Ende des Threads
    return 0;
}


unsigned int _stdcall ThreadFunction(void *param)
{
    int n = *(int *)param;
    
    for( int i = 0; i < n; i++ )
    {
        printf("%d\n", i);
    }

    return 0;
}
Die größeren Schwierigkeiten liegen darin, mehrere Threads zu synchronisieren. Falls du für die Ampelsteuerung mehrere Threads verwenden willst, sind diese vermutlich nicht unabhängig voneinander.

Gruß
MCoder
 
also das mit den threads is jetzt hobbyinteresse, denn für die die ampelsteuerung hab ich ne andere lösung gefunden...
 
also ich hab den code mal so kopiert, da kommen dann leider fehler.

error C2065: 'uintptr_t' : nichtdeklarierter Bezeichner
error C2065: 'hThreadHandle' : nichtdeklarierter Bezeichner
error C2065: '_beginthreadex' : nichtdeklarierter Bezeichner
error C2106: '=' : Linker Operand muss ein L-Wert sein
 
Ja, du hast recht, der Code funktioniert nicht mit VC6. Also hier die Variante für VC6:
C++:
#include <windows.h>
#include <process.h>
#include <stdio.h>

DWORD WINAPI ThreadFunction(void *param);
 
int main()
{
    int param = 100;
 
    HANDLE hThreadHandle = CreateThread( 0,
                                         0,
                                         ThreadFunction,
                                         &param,
                                         0,
                                         0 );
 
    WaitForSingleObject(hThreadHandle, INFINITE); // Wartet auf das Ende des Threads
    return 0;
}
 
 
DWORD WINAPI ThreadFunction(void *param)
{
    int n = *(int *)param;
    
    for( int i = 0; i < n; i++ )
    {
        printf("%d\n", i);
    }
 
    return 0;
}
Gruß
MCoder
 
Hi,

also ich war auch grad dabei einen Thread zu erstellen,
nur wenn ich wie du im oberen Beispiel beschrieben den Thread mit _beginthreadex erstellen will bekomme ich folgende Fehlermeldung:

Fehler 2 error C3867: "comport::CommThread": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&comport::CommThread", um einen Zeiger auf den Member zu erstellen.

weil ja der Funktion eigentlich einen Parameter übergeben wird. Aber im Beispiel bei MSDN wird das ja genauso gemacht.:confused:

Danke schoma im Vorraus
 
Zurück