vb 获取网络时间较快的代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb 获取网络时间较快的代码相关的知识,希望对你有一定的参考价值。
如题,目前百度搜到的一些VB代码,执行好像都比较慢,甚至死机,能否给一段执行较快效率高的代码(本人看到其他一些知名软件获取网络时间非常快,每次都只要一秒,软件的名称我就不说了),不甚感谢,可以帖出,也可以发我919570050.
我用的是vb 6.0
直接用vb转换GMT时间
Private Function getWebDatetime() As String
Dim XmlHttp As Object
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "POST", "http://www.baidu.com", False
XmlHttp.send
getWebDatetime = CDate(1 / 3 + CDbl(CDate(Mid$(XmlHttp.getResponseHeader("Date"), 5, 21))))
Set XmlHttp = Nothing
End Function
扩展资料:
读取网站服务器返回的时间的代码
Private Function getWebDatetime() As String
Dim XmlHttp As Object, objJs As Object
Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
XmlHttp.Open "POST", "http://www.baidu.com", False
XmlHttp.send
Set objJs = CreateObject("msscriptcontrol.scriptcontrol")
objJs.Language = "jScript"
getWebDatetime = objJs.Eval("var dt = new Date('" & XmlHttp.getResponseHeader("Date") & "');var date = [ [dt.getFullYear(), dt.getMonth() + 1, dt.getDate()].join('-'), [dt.getHours(), dt.getMinutes(), dt.getSeconds()].join(':')].join(' ').replace(/(?=\\b\\d\\b)/g, '0');date;")
Set XmlHttp = Nothing
Set objJs = Nothing
End Function
Function getDateTime(Optional url As String) As String
Dim xmlhttp
Dim dt As String
Dim m As Integer, n As Integer
On Error Resume Next
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
If url = "" Then url = "http://www.time.ac.cn"
With xmlhttp
.Open "Get", url, False, "", ""
.setRequestHeader "If-Modified-Since", "0"
.setRequestHeader "Cache-Control", "no-cache"
.setRequestHeader "Connection", "close"
.Send
dt = .getAllResponseHeaders()
m = InStr(1, dt, "Date:", vbTextCompare)
n = InStr(1, dt, "GMT", vbTextCompare)
If m > 0 Then getDateTime = CDate(Trim(Split(Mid(dt, m + 5, n - m - 5), ",")(1))) + #8:00:00 AM#
End With
Set xmlhttp = Nothing
End Function
调用方法:
dt=getDateTime("http://www.baidu.com") '从百度服务器获取时间,我这里获取很快(毫秒级),取决于你访问百度的速度
dt=getDateTime() '从国家授时中心获取时间,我这里访问比较慢追问
谢谢,我输入QQ.com,速度较快,能不能给一段判断网络是否连接的代码,判断速度也快一的
本回答被提问者采纳较快的线程阻塞较慢的线程
【中文标题】较快的线程阻塞较慢的线程【英文标题】:A faster thread blocks slower thread 【发布时间】:2014-11-19 10:43:49 【问题描述】:我正在研究点云查看器,我的设计基于两个线程
第一个线程更新点云数据(约 10 fps) 第二个线程是一个 D3D 渲染器,用于将点集渲染到屏幕上(大约 90 fps)所以我的代码如下所示:
std::shared_ptr<PointCloud> pointcloud;
CRITICAL_SECTION updateLock;
void FirstThreadProc()
while(true)
/* some algorithm processes point cloud, takes time */
EnterCriticalSection(&updateLock);
pointcloud->Update(data,length,...); //also takes time to copy and process
LeaveCriticalSection(&updateLock);
/*...*/
std::shared_ptr<D3DRenderer> renderer;
void SecondThreadProc()
MSG msg = 0 ;
while (WM_QUIT != msg.message)
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
TranslateMessage(&msg);
DispatchMessage(&msg);
else
EnterCriticalSection(&updateLock);
renderer->Render(pointcloud);
LeaveCriticalSection(&updateLock);
我认为第二个线程比第一个线程快得多,所以当第一个线程进入临界区时,第二个线程被阻塞,所以渲染器窗口时不时应该冻结。但我现在观察到的是渲染器窗口运行非常流畅,相机旋转或放大/缩小都很好,但是第一个线程非常不稳定,它的 fps 范围从 10 fps 到 1 fps。
我正在考虑两个点云缓冲区,然后第一个线程在临界区之外更新第二个缓冲区,然后在临界区内交换两个缓冲区。它会起作用吗?
【问题讨论】:
您尝试时出了什么问题? @KerrekSB 我不明白... 您的问题是“它会起作用吗?”作为回报,我的问题是为什么你有理由相信它不会。 这个问题似乎离题了,因为它是关于一个从未实际存在过的假设问题。 ...虽然仅供参考:是的,像这样的双缓冲(甚至是三缓冲)是完全正常的,很多人都成功使用它。 【参考方案1】:如this 中所述,CRITICAL_SECTION 不提供先进先出 (FIFO) 排序。由于第二个线程比第一个线程快得多,而且它的整个循环都是临界区,所以它会在离开后立即进入临界区。这可能总是在关键部分,并将第一个排除在外。
我的解决方案是将第二个线程的更多工作放在关键部分之外,然后它就可以正常工作了。
【讨论】:
以上是关于vb 获取网络时间较快的代码的主要内容,如果未能解决你的问题,请参考以下文章