Wątki, które wypisują napisy z podanym opóźnieniem czasowym

0

Witam,

Mam wykonac takie zadanie:

Program oczekuja na podane dane w formacie <czas w="w" sekundach="sekundach"> <tresc alarmu="alarmu">, twozy za kazdym razem nowy watek dla
nowego alarmu

Napisałem coś takiego:

 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
#include <sys/types.h>

int MAX_ALARMOW = 5;

struct argumenty
{
    int iLiczba;
    char cNapis[32];
};

void *watek1 (void *arg)
{
    struct argumenty *argument = (struct argumenty*)arg;
    int iLiczba = argument -> iLiczba;
    char* cNapis = argument -> cNapis;

    pthread_t pTid = pthread_self();
    
    sleep(iLiczba);

    printf("Moj Tid to: '%u' a napis to: '%s' \n", (unsigned int)pTid, cNapis);
}

int main( int argc, char** argv)
{
    pthread_t ptid;
    struct argumenty argumenty_watka[MAX_ALARMOW];
    int i, iloscAlarmow = 0;

    for(i = 0; i <= MAX_ALARMOW; i++)
    {
        int iloscSekund = 0;
        char cNapis;

        printf("Podaj alarm\n");
        scanf("%d %s", &iloscSekund, &cNapis);
        
        if(iloscSekund !=0)
        {
            argumenty_watka[iloscAlarmow].iLiczba = iloscSekund;
            strcpy(argumenty_watka[iloscAlarmow].cNapis, &cNapis);
            
            pthread_create(&ptid, NULL, &watek1, &argumenty_watka[iloscAlarmow]);
            
            iloscAlarmow++;
            
            if (iloscAlarmow >= MAX_ALARMOW)
            {
                printf("Maksymalna ilosc alarmow");
                break;
            }
                iloscSekund = 0;
        }
        
        fflush(stdin);
}
return 0;
}

Problem w tym, że nie wypisuje informacji od ID watku i napisu. W czym tkwi problem?

Pozdrawiam,

0

Możesz dodać po instrukcji pthread_create instrukcję

pthread_join(ptid, NULL);

. Wtedy nowy wątek będzie tworzony dopiero po skończeniu się poprzedniego.

Pozdrawiam,
A. Mroczek

0
    {
        printf("Podaj alarm\n");
        scanf("%d %31s",&argumenty_watka[iloscAlarmow].iLiczba,argumenty_watka[iloscAlarmow].cNapis);
         if(argumenty_watka[iloscAlarmow].iLiczba,argumenty!=0)
        {
            pthread_create(&ptid, NULL, &watek1, &argumenty_watka[iloscAlarmow]);

1 użytkowników online, w tym zalogowanych: 0, gości: 1