c++ - Sleep Less Than One Millisecond - Stack Overflow
c++ - Sleep Less Than One Millisecond - Stack Overflow:
Actually using this usleep function will cause a big memory/resource leak. (depending how often called)
use this corrected version
Actually using this usleep function will cause a big memory/resource leak. (depending how often called)
use this corrected version
int usleep(long usec)
{
struct timeval tv;
fd_set dummy;
SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
FD_ZERO(&dummy);
FD_SET(s, &dummy);
tv.tv_sec = usec/1000000L;
tv.tv_usec = usec%1000000L;
bool sucess = 0 == select(0, 0, 0, &dummy, &tv);
closesocket(dummy);
return sucess;
}
On windows however, the use of select forces you to include the winsock library which has to be initialized like this in your application:WORD wVersionRequested = MAKEWORD(1,0);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
And then the select won't allow you to be called without any socket so you have to do a little more to create a microsleep method:int usleep(long usec)
{
struct timeval tv;
fd_set dummy;
SOCKET s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
FD_ZERO(&dummy);
FD_SET(s, &dummy);
tv.tv_sec = usec/1000000L;
tv.tv_usec = usec%1000000L;
return select(0, 0, 0, &dummy, &tv);
}
All these created usleep methods return zero when successful and non-zero for errors.
댓글