问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求有流量时才计时的网络计时器

发布网友 发布时间:2022-05-29 05:43

我来回答

1个回答

热心网友 时间:2023-10-08 19:31

下面是基于ace定时器写的网络流量计算代码。你只需要把里面的时间间隔设为你需要的,比如1秒。然后定义一个时间变量,只在每次有流量的时候进行累加,就是网络速度不为0的时候。不过这个是算电脑上网卡流量的~还需要ace的库才可以跑~代码如下:

用这个要先配置好ace,其实不用ace的话直接在个while里面sleep几秒再用handle_timeout也是可以的

#include "ace/Reactor.h"
#include <windows.h>

#include "Iphlpapi.h"
#include "iprtrmib.h"

#include <iostream> //清屏

#include "ace/Event_Handler.h"
#include "ace/Timer_Heap_T.h"
#include "ace/Timer_Queue_Adapters.h"

typedef ACE_Event_Handler_Handle_Timeout_Upcall<ACE_Null_Mutex> Upcall;
typedef ACE_Timer_Heap_T<ACE_Event_Handler *,Upcall,ACE_Null_Mutex> Timer_Heap;
//typedef ACE_Timer_Heap_Iterator_T<ACE_Event_Handler *,Upcall,ACE_Null_Mutex> Timer_Heap_Iterator;
typedef ACE_Thread_Timer_Queue_Adapter<Timer_Heap> Thread_Timer_Queue;

//DWORD index;
class CTimerHandler : public ACE_Event_Handler
{
public:
DWORD dwLastOut;
DWORD dwLastIn;
DWORD dwLastTime;
virtual int handle_timeout(const ACE_Time_Value &tv, const void *arg = 0)
{
//SYSTEMTIME time;
//GetLocalTime(&time);
//printf("%d:%d:%d\ninput 0 to end\n", time.wHour, time.wMinute, time.wSecond);
//Sleep(3000);printf("qwe\n");

MIB_IFROW mi;
mi.dwIndex = 2;//2
GetIfEntry(&mi);
DWORD thisUp = mi.dwOutOctets;

system("cls");//清屏

DWORD dwthisTime = GetTickCount();
DWORD dwPastTime = dwthisTime - dwLastTime;
dwLastTime = dwthisTime;
dwPastTime /= 1000;//毫秒转换为秒
dwPastTime = (dwPastTime > 1) ? dwPastTime : 1; //不足1秒取1秒
if (mi.dwInOctets - dwLastIn > 1024)
{
printf("发送: %dK/s 接收%dK/s\n", (mi.dwOutOctets - dwLastOut)/ 1024 / dwPastTime, (mi.dwInOctets - dwLastIn)/ 1024 / dwPastTime);
}
else
printf("发送: %dB/s 接收%dB/s\n", (mi.dwOutOctets - dwLastOut) / dwPastTime, (mi.dwInOctets - dwLastIn) / dwPastTime);
printf("带宽%db/s\n", mi.dwSpeed);
dwLastOut = mi.dwOutOctets;
dwLastIn = mi.dwInOctets;
printf("发送: %dBytes 接收%dBytes\n", dwLastOut, dwLastIn);

return 0;
}

};

int ACE_TMAIN(int, ACE_TCHAR *[])
{
char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
int nAdapterIndex = 0;
DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize); // 关键函数
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
DWORD dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡
{
/*string strTemp;*/
printf("网卡的名字:%s\n",pAdapter->AdapterName);// 网卡名字
printf("网卡的index:%d\n",pAdapter->Index);// 编号
// strTemp = CString("\\Device\\NPF_") + strTemp;??? // 加上前缀
// strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
// strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP
// FormatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr,pAdapter->Address ); // MAC
// AdapterList[nAdapterIndex].filled = true;
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
}

//ULONG ListSize = (ULONG)sizeof(PIP_ADAPTER_INFO);
//PIP_ADAPTER_INFO *pAdapterListBuffer = new PIP_ADAPTER_INFO;

//GetAdaptersInfo(pAdapterListBuffer, &uListSize);
//printf("%d",pAdapterListBuffer->Index);
//delete pAdapterListBuffer;

CTimerHandler * pTH = new CTimerHandler();

//ACE_Reactor reactor;
//int id = ACE_Reactor::instance()->schele_timer(pTH, NULL, ACE_Time_Value(0), ACE_Time_Value(5));
////ACE_Reactor::instance()->run_reactor_event_loop();
//while (1)
//{
// ACE_Reactor::instance()->handle_events();
// printf("....\n");
//}
//LPWSTR name = L"";
//GetAdapterIndex(
// name,
// &index
// );

Thread_Timer_Queue timer;
timer.schele(pTH, NULL, ACE_Time_Value(1) + ACE_OS::gettimeofday(), ACE_Time_Value(1));
timer.activate();

int stop;
printf("input 0 to end\n");
scanf_s("%d",&stop);
if (0 == stop)
{
//ACE_Reactor::instance()->cancel_Timer(id);
timer.deactivate();
timer.wait();
}

//int i = -7;
//i = 0xEFFFFFFF & i;
////i = i>>1;
//printf("%o\n",i);
scanf_s("%d",&stop);

return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 房地产企业拆迁补偿款是多少? 网络有没有宽带连接计时器的程序 房地产拆迁补偿 求一个好些的无线上网计时器?请仔细阅读我的补充说明。 房地产企业拆迁有哪些补偿方式 网络计时器(或者电脑计时器) 网吧计时器 房地产开发企业拆迁补偿标准 哪里有网络计时器? 电信无线上网卡计时器 上网计时器怎么破解 上网计时器 怎么在自己网站添加 计时器 急 有没有上网计时器? 请问有军华网计时器 V3.2 绿色版软件免费百度云资源吗 行酒令是谁想出的?什么时候盛行? 行酒令是怎么回事? 我的用电脑版微信登录不上去,而别人的号却可以登录上去(同一台电脑)? 朱亭香能不能做名字? 晧可以用做名字吗,是生僻字吗?能办到出生证吗? 房地产企业支付的拆迁补偿费如何抵扣? 网络计时器 房地产企业给拆迁户的拆迁补偿费是否视同销售? 复员军人可以考取公务员吗? 房地产开发企业支付的拆迁补偿费,哪些是*以后还要补偿的?哪些是需要自行负担的? 房地产给予拆迁户的补偿费是否需要开具发票? 退伍军人可否报考公务员 请教房地产开发企业拆迁补偿费税务处理的问题 退伍军人报考公务员 - 信息提示 初中历史:两次国共合作的背景及意义 第二次国共合作的历史背景 国共合作哪年? 国共两党合作的历史原因是什么? 国共第二次合作取得什么成就 布达拉宫和扎什伦布寺哪个历史悠久 2016年万年历什么时候出九九 万年历1964年是什么时间打春 添加机油选择什么类型(全合成、半合成,矿物)的更好一点? 23-24点在万年历是什么时候