C、使用“usleep”函数时编译错误

Plu*_*sce 1 c ubuntu

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

\n\n
muteks.c:70:4: warning: implicit declaration of function \xe2\x80\x98usleep\xe2\x80\x99 [-Wimplicit-function-declaration]\n    usleep(300);\n    ^\n
Run Code Online (Sandbox Code Playgroud)\n\n

源代码:

\n\n
#include <stdlib.h>\n#include <stdio.h>\n#include <time.h>\n#include <pthread.h>\n\nvoid * klientWatek (void* arg);\npthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;\nstatic int lKf = 10;\nint lKl = 15;\n\nint main ()\n{\n        pthread_t *klientTab;\n        int *klientTabId;\n        int lKr = 1;\n        int i;\n        // pami\xc4\x99\xc4\x87 dla identyfikatora w\xc4\x85tku\n        klientTab = (pthread_t *) malloc (lKl* sizeof (pthread_t));\n        klientTabId = (int *) malloc (lKl*sizeof (int)); //pami\xc4\x99\xc4\x87 dla id\n        // b\xc4\x99d\xc4\x85cego argumentem przekazywanym do  funkcji\n        for (i=0; i<lKl; i++) klientTabId[i]=i; //przypisanie\n\n        printf("\\nOtwieramy pub (simple)!\\n");\n        printf("\\nLiczba wolnych kufli %d\\n", lKf);\n\n        for (i=0; i<lKl; i++)\n        {\n                pthread_create (&klientTab[i], NULL, klientWatek, \n                &klientTabId[i]);\n        }\n\n        for (i=0; i<lKl; i++)\n        { //w\xc4\x85tek joinable, r\xc4\x99cznie zwalniamy zasoby\n                pthread_join (klientTab[i], NULL);\n        }\n\n        printf("\\nZamykamy pub!\\n");\n        printf("\\nLiczba wolnych kufli %d\\n", lKf);\n\nvoid * klientWatek (void * argWsk)//zostanie przekazany klientTabId[i]\n{\n        int mojId = * ( (int *) argWsk);\n        int i,j;\n\n        int pobranoKufel = 0;\n        int ileMuszeWypic = 2;\n\n        printf ("\\nKlient %d, wchodz\xc4\x99 do pubu\\n", mojId);\n\n        for (i=0; i<ileMuszeWypic; i++)\n        {\n           do\n           {\n              pthread_mutex_lock(&mutex);\n              if (lKf > 0)\n              {\n                printf("\\nSprawdzi\xc5\x82em, czy jest wolny kufel\\n");\n                lKf--;\n                pobranoKufel = 1;\n                printf("\\nWzi\xc4\x85\xc5\x82em kufel\\n");\n              }\n\n              pthread_mutex_unlock(&mutex);\n            } while (pobranoKufel == 0);\n          printf("\\nKlient %d, wybieram kufel\\n", mojId);\n\n          j=0;\n          printf("\\nKlient %d, nalewam z kranu %d\\n", mojId, j);\n          usleep(300);\n\n          printf("\\nKlient %d, pije\\n", mojId);\n          nanosleep((struct timespec[]){{0, 500000000L}},NULL);\n\n          printf("\\nKlient %d, odkladam kufel\\n", mojId);\n\n          if (pobranoKufel == 1)\n          {\n             pthread_mutex_lock(&mutex);\n             pobranoKufel=0;\n             lKf++;\n             pthread_mutex_unlock(&mutex);\n          }\n        }\n        printf("\\nKlient %d, wychodz\xc4\x99 z pubu\\n", mojId);\n\n        return (NULL);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试编译程序的方式:

\n\n
gcc -Wall -pedantic -std=gnu99 -pthread muteks.c -o przyklad\n
Run Code Online (Sandbox Code Playgroud)\n\n

我现在应该做什么来编译它?

\n

P.P*_*.P. 6

usleep()unistd.h在您尚未包含的标准标头中声明。包括它:

#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)

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