澳门威斯尼人平台登陆windows获取时间的方法

by admin on 2019年10月25日

正常获取:

前几天在问答区提了一下这个问题,所有回答问题的朋友都说不可能通过PHP实现,碰巧我的实习负责人帮我找到了一个方法,貌似是通过NTLM来实现的,我是新手,对具体原理也知之不详,只是自己测试了一下,很好用.
所以赶快拿出来与大家分享.这是一个法国人写的,所以编码中的注释都是法语,如果有朋友很想了解某行的注释含义,请回帖说明,我可以试着翻译一下.

介绍      
我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执
行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者
算法的运行时间。编译器和操作系统为我们提供了很多时间函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合适的时间函
数。现在我就介绍windows下的几种常用时间函数。1:Sleep函数使用:sleep(1000),在Windows和Linux下1000代表的含义并不相同,Windows下的表示1000毫秒,也就是1秒钟;Linux下表示1000秒,Linux下使用毫秒级别的函数可以使用usleep。原理:sleep函数是使调用sleep函数的线程休眠,线程主动放弃时间片。当经过指定的时间间隔后,再启动线程,继续执行代码。Sleep函数并不能起到定时的作用,主要作用是延时。在一些多线程中可能会看到sleep(0);其主要目的是让出时间片。精度:sleep函数的精度非常低,当系统越忙它精度也就越低,有时候我们休眠1秒,可能3秒后才能继续执行。它的精度取决于线程自身优先级、其他线程的优先级,以及线程的数量等因素。2:MFC下的timer事件       使用:1.调用函数SetTimer()设置定时间隔,如SetTimer(0,100,NULL)即为设置100毫秒的时间间隔;2.在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理语句,用来完成时间到时的操作。    原理:同sleep函数一样。不同的是timer是一个定时器,可以指定回调函数,默认为OnTimer()函数。    精度:timer事件的精度范围在毫米级别,系统越忙其精度也就越差。3:C语言下的Time       使用:time_t
t;time(&t);Time函数是获取当前时间。    原理:time函数主要用于获取当前时间,比如我们做一个电子时钟程序,就可以使用此函数,获取系统当前的时间。    精度:秒级别4:COM对象中的COleDateTime,COleDateTimeSpan    使用:COleDateTime
start_time = COleDateTime::GetCurrentTime();COleDateTimeSpan end_time
= COleDateTime::GetCurrentTime()-start_time;
While(end_time.GetTotalSeconds() < 2)
{
// 处理延时或定时期间能处理其他的消息
DoSomething()
end_time =
COleDateTime::GetCurrentTime-start_time;}原理:以上代表延时2秒,而这两秒内我们可以循环调用DoSomething(),从而实现在延时的时候我们也能够处理其他的函数,或者消息。COleDateTime,COleDateTimeSpan是MFC中CTime,CTimeSpan在COM中的应用,所以,上面的方法对于CTime,CTimeSpa同样有效。       精度:秒级别5:C语言下的时钟周期clock()       使用:  
clock_t start = clock();
              Sleep(100);
              clock_t end = clock();
          double d = (double)(start – end) /
CLOCKS_PER_SEC;       原理:clock()是获取计算机启动后的时间间隔。精度:ms级别,对于短时间内的定时或者延时可以达到ms级别,对于时间比较长的定时或者延迟精度还是不够。在windows下CLOCKS_PER_SEC为1000。6:Windows下的GetTickCount()使用: DWORD
start = GetTickCount();
        Sleep(100);
澳门威斯尼人平台登陆,        DWORD end =
GetTickCount();原理:GetTickCount()是获取系统启动后的时间间隔。通过进入函数开始定时,到退出函数结束定时,从而可以判断出函数的执行时间,这种时间也并非是函数或者算法的真实执行时间,因为在函数和算法线程不可能一直占用CPU,对于所有判断执行时间的函数都是一样,不过基本上已经很准确,可以通过查询进行定时。GetTickCount()和Clock()函数是向主板BIOS要real
time clock时间,会有中断产生,以及延迟问题。精度:WindowsNT
3.5以及以后版本精度是10ms,它的时间精度比clock函数的要高,GetTickCount()常用于多媒体中。7:Windows下timeGetTime使用:需要包含Mmsystem.h,Windows.h,加入静态库Winmm.lib.timeBeginPeriod(1);
DWORD start = timeGetTime();
              Sleep(100);
          DWORD end = timeGetTime();
timeEndPeriod(1);原理:timeGetTime也时常用于多媒体定时器中,可以通过查询进行定时。通过查询进行定时,本身也会影响定时器的定时精度。精度:毫秒,与GetTickCount()相当。但是和GetTickCount相比,timeGetTime可以通过timeBeginPeriod,timeEndPeriod设置定时器的最小解析精度,
timeBeginPeriod,timeEndPeriod必须成对出现。8:windows下的timeSetEvent
使用:还记的VC下的Timer吗?Timer是一个定时器,而以上我们提到几种时间函数或者类型,实现定时功能只能通过轮训来实现,也就是必须另外创建一个线程单独处理,这样会影响定时精度,好在windows提供了内置的定时器timeSetEvent,函数原型为MMRESULT
timeSetEvent( UINT uDelay, //以毫秒指定事件的周期
UINT uResolution,
//以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms
LPTIMECALLBACK lpTimeProc, //指向一个回调函数
WORD dwUser, //存放用户提供的回调数据
UINT fuEvent )//
标志参数,TIME_ONESHOT:执行一次;TIME_PERIODIC:周期性执行      
具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在
lpFunction回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是:任务处理的时间不能大于周期间隔时间。另外,在定时器
使用完毕后,应及时调用timeKillEvent()将之释放。原理:可以理解为代回调函数的timeGetTime精度:毫秒,timeSetEvent可以通过timeBeginPeriod,timeEndPeriod设置定时器的最小解析精度,
timeBeginPeriod,timeEndPeriod必须成对出现。
9:高精度时控函数QueryPerformanceFrequency,QueryPerformanceCounter使用:LARGE_INTEGER
m_nFreq;
          LARGE_INTEGER m_nBeginTime;
          LARGE_INTEGER nEndTime;
          QueryPerformanceFrequency(&m_nFreq); // 获取时钟周期
          QueryPerformanceCounter(&m_nBeginTime); // 获取时钟计数
          Sleep(100);
          QueryPerformanceCounter(&nEndTime);
     cout <<
(nEndTime.QuadPart-m_nBeginTime.QuadPart)*1000/m_nFreq.QuadPart
<<
endl;原理:CPU上也有一个计数器,以机器的clock为单位,可以通过rdtsc读取,而不用中断,因此其精度与系统时间相当。精度:计算机获取硬件支持,精度比较高,可以通过它判断其他时间函数的精度范围。10小结:以上提到常用的9种时间函数,由于他们的用处不同,所以他们
的精度也不尽相同,所以如果简单的延时可以用sleep函数,稍微准确的延时可以使用clock函数,GetTickCount函数,更高级的实用
timeGetTime函数;简单的定时事件可以用Timer,准确地可以用timeSetEvent;或取一般系统时间可以通time,或者
CTime,或者COleDateTime,获取准确的时间可以用clock,或者GetTickCount函数,或者timeGetTime函数,而获
取准确地系统时间要使用硬件支持的QueryPerformanceFrequency函数,QueryPerformanceCounter函数。

UIWindow *window = [[UIApplication
sharedApplication]windows].lastObject;
UIWindow *window = [[UIApplication sharedApplication].windows
lastObject];
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIWindow *window = [[UIApplication sharedApplication].delegate
window];
UIView *view =
[[UIViewalloc]initWithFrame:CGRectMake(100,100,100,100)];
view.backgroundColor= [UIColor redColor];
[window addSubview:view];

whoami /user
<?php
/***********************************************************************
************************************************************************
*
* PHP NTLM GET LOGIN 
* Version 0.2.1                  
* Copyright (c) 2004 Nicolas GOLLET ( Nicolas (dot) gollet (at) secusquad (dot) com )
* Copyright (c) 2004 Flextronics Saint-Etienne
*
* This program is free software. You can redistribute it and/or modify 
* it under the terms of the GNU General Public License as published by 
* the Free Software Foundation; either version 2 of the License.    
*
***********************************************************************/
session_start();
$headers = apache_request_headers(); // 获取用户头
if (@$_SERVER['HTTP_VIA'] != NULL){ // 确认是否使用了代理(proxy),因为ntlm验证不能穿过代理.
echo "Proxy bypass!";
}
elseif($headers['Authorization'] == NULL){  //si l'entete autorisation est inexistante如果许可头不存在
 header( "HTTP/1.0 401 Unauthorized" );  //envoi au client le mode d'identification
 header( "WWW-Authenticate: NTLM" );  //dans notre cas le NTLM
 exit;    //on quitte
}
if(isset($headers['Authorization']))   //dans le cas d'une authorisation (identification)
{ 
 if(substr($headers['Authorization'],0,5) == 'NTLM '){ // 确认client是否在ntlm下

  $chaine=$headers['Authorization'];   
  $chaine=substr($chaine, 5);  // 获取 base64-encoded type1 信息
  $chained64=base64_decode($chaine); // 解码 base64 到 $chained64

  if(ord($chained64{8}) == 1){   
  //   |_ byte signifiant l'etape du processus d'identification (etape 3) 

  // verification du drapeau NTLM "0xb2" ?l'offset 13 dans le message type-1-message (comp ie 5.5+) :
  if (ord($chained64[13]) != 178){
   echo "NTLM Flag error!";
   exit;
  }

  $retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
  $retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000);
  $retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000);
  $retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);

  $retAuth64 =base64_encode($retAuth); // encode en base64
  $retAuth64 = trim($retAuth64);  // enleve les espaces de debut et de fin
  header( "HTTP/1.0 401 Unauthorized" );  // envoi le nouveau header
  header( "WWW-Authenticate: NTLM $retAuth64" ); // avec l'identification suppl閙entaire
  exit;

  }

  else if(ord($chained64{8}) == 3){
  //     |_ byte signifiant l'etape du processus d'identification (etape 5)

  // on recupere le domaine
  $lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
  $offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain. 
  $domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain

  //le login
  $lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
  $offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
  $login = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login

  if ( $login != NULL){
   // stockage des donn閑s dans des variable de session
   $_SESSION['Login']=$login;
   header("Location: newpage.php");
   exit;
  }
  else{
   echo "NT Login empty!";
  }


  }
 }
}
?>

我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执
行一个特定的操作,比如…

UIWindow &&view&&UIViewController&&app开始运行到弹出界面的过程
一、设置主窗口
[self.window makeKeyAndVisible]
让窗口成为主窗口并显示出来(单独对view是没有办法自己显示出来的,必须要依托UIWindow)
[self.window make keyWindow[ 让UIWindow成为主窗口但不显示出来
二、获取UIWindow
①获取视图view的列表数组:[UIApplication sharedApplication].windows
(UIApplication指当前应用程序,windows为UIApplication的属性,获取视图列表)
②获取主视图:[UIApplication sharedApplication].keyWindow
keyWindows是UIApplication的主视图属性。同时只有当前视图是主视图
③获取某个view所在的UIWindow:view.window
三、窗口创建、视图显示过程
main函数–>UIApplication(argc,argv,nil,NSStringFromClass([AppDelegate
class])

(第三个参数是主要类,是UIApplication的子类,nil指的就是UIApplication即当前应用程序;第四个参数是代理类,遵循UIApplicationDelegate,负责控制程序的运行。)
通过这两个参数创建application、创建代理,并把代理设置给application—>调用delegate对象(一般就是APPDelegate)的application:didFinishLaunchingWithOption:方法

澳门威斯尼人平台登陆 1

您可能感兴趣的文章:

  • PHP+Ajax验证码验证用户登录
  • php有效防止同一用户多次登录
  • WAMPserver配置方法(允许外部访问、phpmyadmin设置为输入用户名密码才可登录等)
  • php中使用session防止用户非法登录后台的方法
  • ThinkPHP之用户注册登录留言完整实例
  • php中如何同时使用session和cookie来保存用户登录信息
  • php中使用cookie来保存用户登录信息的实现代码
  • php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
  • PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)

如果要获取其他用户的SID就显得力不从心了,我们可以使用微软提供的系统工具

接下来分两种情况
①有storyboard时:根据info.plist里面的name(即main nib file base
name项),找到对应的storyboard,接下来创建一个window—>>c创建其的控制器(就是箭头指的那个),并自动把这个控制器设置为UIWindow的根控制器。
②没有storyboard时:
调用方法后,创建UIWindow–>创建UIWindow的rootViewController—>显示窗口
注意:第二种方法会更快。方法是删去info.plist中的main nib file base
name项,代码如下(通用代码):
-(BOOL)application:(UIApplication)
didFinishLaunchingOptions:(NSDictionary)launchOptions
{
self.window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]
bounds]];//mainScreen获取当前屏幕尺寸;bounds指的是全屏;applicationFrame指的是除了状态栏的全屏;
if([[UIDevice currentDevice]
userInterfaceIdiom]==UIUserInterfaceIdiomPhone)
{
self.viewController=[[viewController
alloc]initWithNibName:@”viewController_iPhone”
bundle:nil];//创建window
}
else
{
self.viewController=[[viewController
alloc[initWithNibName:@”viewController_iPad: bundle:nil];
}
self.window.rootViewController=self.viewController;//设置根控制器
[self.window makeKeyAndVisible];//设置主视图并显示
return YES;
}
(该方法负责controller类的初始化)
在不用判断是iPhone还是iPad时,这个方法可以更加简便:
-(BOOL)application:(UIApplication)didFinishLaunchingOptions:(NSDictionary
)launchOptions
{
self.window=[[UIWindow alloc] initWithFrame:[[UIWindow mainScreen]
bounds];
self.window.backgroundColor=[UIColor whiteColor];
self.window.rootViewController=self.viewController;//设置根控制器
[self.window.makeKeyAndVisible];//设置为主窗口并显示
return YES;
}
总的过程就是 创建application—>创建代理—>UIWindow
在上面两段代码中,self.window.rootViewController=self.viewController设置根控制器其实就是将view添加到UIWindow
http://www.it165.net/pro/html/201406/15046.html这里有个图,来自官方文档,十分清晰。UIWindow和view通过根控制器viewController连接
将view添加到UIWindow还有另外一个方法 addSubview
———>[self.window addSubview:self.view];
但是不推荐这种不通过根控制器直接添加view的做法,原因:
①控制器上可能有按钮等点击事件。而控制器是局部变量,若控制器不存在了,而view还存在,会出错;
②若要实现通过屏幕上的按钮控制屏幕旋转,是由根控制器控制旋转的;而第二种方法因为根本没有用根控制器,自然也无法旋转
三、UIApplication
方法sharedApplication:获取应用程序的句柄
属性delegate获取UIApplicationDelegate实现类的实例(一般是APPDelegate)
属性windows获取当前程序涉及到的窗口类数组
属性keywindow获取当前程序的主窗口
UIApplication的其他应用还包括:设置应用图标右上角的红色数字;设置联网指示器的可见性;管理状态栏(需要先修改info.plist);利用openURL:方法实现打电话发短信发邮件打开网页和跳转到其他APP
四、UIApplicationDelegate
其实例化一般就是AppDelegate,负责管理app被打断时,通知代理进入后台
aplplication:didFinshLaunchingWithOptions:程序加载完毕
applicationDidBecameActive:程序获取焦点(可交互)
applicationDidEnterBackground:程序进入后台
applicationDidResignActive:程序失去焦点(不可交互)
applicationWillEnterForeground:程序从后台回到前台
applicationDidReciveMemoryWarning:内存警告,可能要终止程序
applicationWillTerminate:程序即将退出

Sysinternals Suite

  下载地址:

之后解压到某个盘中,之后调用其中的PsGetsid.exe工具

澳门威斯尼人平台登陆 2

可以看出其中的得到的结果是相同的。

如果你想改变用户的Sid可以使用newsid软件来修改

 

http://blog.csdn.net/chengyingzhilian/article/details/7872096

一、UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。UIWindow在程序中主要起到三个作用:
1、作为容器,包含app所要显示的所有视图
2、传递触摸消息到程序中view和其他对象
3、与UIViewController协同工作,方便完成设备方向旋转的支持
二、通常我们可以采取两种方法将view添加到UIWindow中:
1、addSubview
直接将view通过addSubview方式添加到window中,程序负责维护view的生命周期以及刷新,但是并不会为去理会view对应的ViewController,因此采用这种方法将view添加到window以后,我们还要保持view对应的ViewController的有效性,不能过早释放。
2、rootViewController
rootViewController时UIWindow的一个遍历方法,通过设置该属性为要添加view对应的ViewController,UIWindow将会自动将其view添加到当前window中,同时负责ViewController和view的生命周期的维护,防止其过早释放
三、WindowLevel
UIWindow在显示的时候会根据UIWindowLevel进行排序的,即Level高的将排在所有Level比他低的层级的前面。下面我们来看UIWindowLevel的定义:
constUIWindowLevel UIWindowLevelNormal;
constUIWindowLevel UIWindowLevelAlert;
constUIWindowLevel UIWindowLevelStatusBar;
typedef CGFloat UIWindowLevel;
IOS系统中定义了三个window层级,其中每一个层级又可以分好多子层级(从UIWindow的头文件中可以看到成员变量CGFloat_windowSublevel;),不过系统并没有把则个属性开出来。UIWindow的默认级别是UIWindowLevelNormal,我们打印输出这三个level的值分别如下:
[objc]view
plaincopy
print?
2012-03-2722:46:08.752UIViewSample[395:f803] Normal
windowlevel:0.000000
2012-03-2722:46:08.754UIViewSample[395:f803] Normal
windowlevel:2000.000000
2012-03-2722:46:08.755UIViewSample[395:f803] Normal
windowlevel:1000.000000
这样印证了他们级别的高低顺序从小到大为Normal < StatusBar <
Alert,下面请看小的测试代码:
TestWindowLevel

澳门威斯尼人平台登陆 3

澳门威斯尼人平台登陆 4

  • (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen
    mainScreen] bounds]] autorelease];
    self.window.backgroundColor = [UIColor yellowColor];
    [self.window makeKeyAndVisible];
    UIWindow *normalWindow = [[UIWindow alloc]
    initWithFrame:[[UIScreen mainScreen] bounds]];
    normalWindow.backgroundColor = [UIColor blueColor];
    normalWindow.windowLevel = UIWindowLevelNormal;
    [normalWindow makeKeyAndVisible];
    CGRect windowRect = CGRectMake(50,
    50,
    [[UIScreen mainScreen] bounds].size.width -100,
    [[UIScreen mainScreen] bounds].size.height -100);
    UIWindow *alertLevelWindow = [[UIWindow alloc]
    initWithFrame:windowRect];
    alertLevelWindow.windowLevel = UIWindowLevelAlert;
    alertLevelWindow.backgroundColor = [UIColor redColor];
    [alertLevelWindow makeKeyAndVisible];
    UIWindow *statusLevelWindow = [[UIWindow alloc]
    initWithFrame:CGRectMake(0,50,320,20)];
    statusLevelWindow.windowLevel = UIWindowLevelStatusBar;
    statusLevelWindow.backgroundColor = [UIColor blackColor];
    [statusLevelWindow makeKeyAndVisible];
    NSLog(@”Normal window level: %f”, UIWindowLevelNormal);
    NSLog(@”Normal window level: %f”, UIWindowLevelAlert);
    NSLog(@”Normal window level: %f”, UIWindowLevelStatusBar);
    returnYES;
    }

    澳门威斯尼人平台登陆 5

运行结果如下图:

澳门威斯尼人平台登陆 6

我们可以注意到两点:
1)我们生成的normalWindow虽然是在第一个默认的window之后调用makeKeyAndVisible,但是仍然没有显示出来。这说明当Level层级相同的时候,只有第一个设置为KeyWindow的显示出来,后面同级的再设置KeyWindow也不会显示。
2)statusLevelWindow在alertLevelWindow之后调用makeKeyAndVisible,淡仍然只是显示在alertLevelWindow的下方。这说明UIWindow在显示的时候是不管KeyWindow是谁,都是Level优先的,即Level最高的始终显示在最前面。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图