60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
/*
|
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
|
*
|
|
* This program is free software: you can use, redistribute, and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3
|
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#define _DEFAULT_SOURCE
|
|
#include "os.h"
|
|
|
|
#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32)
|
|
|
|
void taosMsleep(int32_t ms) { Sleep(ms); }
|
|
|
|
#else
|
|
|
|
#include <unistd.h>
|
|
|
|
/*
|
|
to make taosMsleep work,
|
|
signal SIGALRM shall be blocked in the calling thread,
|
|
|
|
sigset_t set;
|
|
sigemptyset(&set);
|
|
sigaddset(&set, SIGALRM);
|
|
pthread_sigmask(SIG_BLOCK, &set, NULL);
|
|
*/
|
|
void taosMsleep(int32_t mseconds) {
|
|
#if 1
|
|
usleep(mseconds * 1000);
|
|
#else
|
|
struct timeval timeout;
|
|
int32_t seconds, useconds;
|
|
|
|
seconds = mseconds / 1000;
|
|
useconds = (mseconds % 1000) * 1000;
|
|
timeout.tv_sec = seconds;
|
|
timeout.tv_usec = useconds;
|
|
|
|
/* sigset_t set; */
|
|
/* sigemptyset(&set); */
|
|
/* sigaddset(&set, SIGALRM); */
|
|
/* pthread_sigmask(SIG_BLOCK, &set, NULL); */
|
|
|
|
select(0, NULL, NULL, NULL, &timeout);
|
|
|
|
/* pthread_sigmask(SIG_UNBLOCK, &set, NULL); */
|
|
#endif
|
|
}
|
|
|
|
#endif
|