关于ubuntu:C,使用” usleep”功能期间的编译错误

C, error of compilation during using “usleep” function

我使用Ubuntu Linux。当我尝试使用" usleep"函数时,会收到有关"函数usleep的隐式声明"的信息。下面是错误代码:

1
2
3
muteks.c:70:4: warning: implicit declaration of function ‘usleep’ [-Wimplicit-function-declaration]
    usleep(300);
    ^

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <pthread.h>

void * klientWatek (void* arg);
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static int lKf = 10;
int lKl = 15;

int main ()
{
        pthread_t *klientTab;
        int *klientTabId;
        int lKr = 1;
        int i;
        // pami?? dla identyfikatora w?tku
        klientTab = (pthread_t *) malloc (lKl* sizeof (pthread_t));
        klientTabId = (int *) malloc (lKl*sizeof (int)); //pami?? dla id
        // b?d?cego argumentem przekazywanym do  funkcji
        for (i=0; i<lKl; i++) klientTabId[i]=i; //przypisanie

        printf("\
Otwieramy pub (simple)!\
"
);
        printf("\
Liczba wolnych kufli %d\
"
, lKf);

        for (i=0; i<lKl; i++)
        {
                pthread_create (&klientTab[i], NULL, klientWatek,
                &klientTabId[i]);
        }

        for (i=0; i<lKl; i++)
        { //w?tek joinable, r?cznie zwalniamy zasoby
                pthread_join (klientTab[i], NULL);
        }

        printf("\
Zamykamy pub!\
"
);
        printf("\
Liczba wolnych kufli %d\
"
, lKf);

void * klientWatek (void * argWsk)//zostanie przekazany klientTabId[i]
{
        int mojId = * ( (int *) argWsk);
        int i,j;

        int pobranoKufel = 0;
        int ileMuszeWypic = 2;

        printf ("\
Klient %d, wchodz? do pubu\
"
, mojId);

        for (i=0; i<ileMuszeWypic; i++)
        {
           do
           {
              pthread_mutex_lock(&mutex);
              if (lKf > 0)
              {
                printf("\
Sprawdzi?em, czy jest wolny kufel\
"
);
                lKf--;
                pobranoKufel = 1;
                printf("\
Wzi??em kufel\
"
);
              }

              pthread_mutex_unlock(&mutex);
            } while (pobranoKufel == 0);
          printf("\
Klient %d, wybieram kufel\
"
, mojId);

          j=0;
          printf("\
Klient %d, nalewam z kranu %d\
"
, mojId, j);
          usleep(300);

          printf("\
Klient %d, pije\
"
, mojId);
          nanosleep((struct timespec[]){{0, 500000000L}},NULL);

          printf("\
Klient %d, odkladam kufel\
"
, mojId);

          if (pobranoKufel == 1)
          {
             pthread_mutex_lock(&mutex);
             pobranoKufel=0;
             lKf++;
             pthread_mutex_unlock(&mutex);
          }
        }
        printf("\
Klient %d, wychodz? z pubu\
"
, mojId);

        return (NULL);
}

我尝试编译程序的方式:

1
gcc -Wall -pedantic -std=gnu99 -pthread muteks.c -o przyklad

现在我该怎么做才能编译?


在未包含的标准头文件unistd.h中声明了

usleep()。包含它:

1
#include <unistd.h>

相关说明:usleep()自POSIX-2008起已被删除,建议改用nanosleep()


1
#include <unistd.h>

见男人不眠