Linux 下 Qt关于微秒级别的定时器

2025-03-21 07:25:35
推荐回答(1个)
回答1:

select可以达到微妙级别,你百度下select timer,下面是win下面使用select的例子
#include
#include
#include
#include
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{

DWORD dwVersion = 0; WSADATA wsaData; DWORD dwErr = 0;
dwErr = WSAStartup(MAKEWORD(0x2, 0x2), &wsaData);
if (0 != dwErr)
{printf("winsock init error!\n");return -1;}
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (INVALID_SOCKET == s)
{
printf("create a socket error!\n");
WSACleanup();
return -1;
}
// 设置为非阻塞
int nRet = 0;
u_long lRet = 1;
nRet = ioctlsocket(s, FIONBIO, &lRet);
if (SOCKET_ERROR == nRet)
{
printf("set socket error!\n");
closesocket(s);
WSACleanup();
return -1;
}
int time=0;
while( 1 ){
fd_set rfds ;
struct timeval tval;

FD_ZERO( &rfds ) ;
FD_SET(1,&rfds);
tval.tv_sec = 1 ; /*秒*/
tval.tv_usec =0 ; /*微秒, 1秒=10的3次方毫秒=10的6次方微妙*/
int ret =select( 1, &rfds, NULL, NULL, &tval );
if(ret==0 ){
cout< }
else
{cout< break;
}

}
WSACleanup();
return 0;
}