GVKun编程网logo

php – 我可以让一段代码超时吗?(php设置超时时间)

9

在本文中,您将会了解到关于php–我可以让一段代码超时吗?的新资讯,同时我们还将为您解释php设置超时时间的相关在本文中,我们将带你探索php–我可以让一段代码超时吗?的奥秘,分析php设置超时时间的

在本文中,您将会了解到关于php – 我可以让一段代码超时吗?的新资讯,同时我们还将为您解释php设置超时时间的相关在本文中,我们将带你探索php – 我可以让一段代码超时吗?的奥秘,分析php设置超时时间的特点,并给出一些关于angularjs – 我可以让一个函数在每个控制器在角度?、apache - php可以发出请求执行代码时先执行另外一段代码么、c# – NUnit可以期待超时吗?、c# – 我可以简化这段代码吗?如果是这样的话的实用技巧。

本文目录一览:

php – 我可以让一段代码超时吗?(php设置超时时间)

php – 我可以让一段代码超时吗?(php设置超时时间)

我正在使用一个与服务器建立远程连接的类.我遇到的一个问题是,如果连接没有得到响应,它会等到它发生. @H_301_5@

@H_301_5@这个类没有内置的超时,如果我可以避免它,我不想修改它.

@H_301_5@有什么方法可以用这样的东西包装一段代码吗?

@H_301_5@

try(timeout seconds){
}catch(){
    //exception handle
}timeout(){
    // timeout handline
}
@H_301_5@编辑:我使用远程连接作为一个问题.我还有其他我需要解决的问题,比如用exec或其他类似的东西进行系统调用.

解决方法

不仅仅是代码的一部分. @H_301_5@

@H_301_5@但是,根据要求,有一些替代解决方案,无需修改原始代码:

@H_301_5@参数或者set_time_limit

@H_301_5@如果运行时间太长,set_time_limit()将中止整个脚本.你仍然可以设置shutdown function.

@H_301_5@pcntl_alarm

@H_301_5@pcntl_alarm()将在给定的时间后向您发送一个信号,这可能会中止该类当时正在进行的阻塞系统调用,这可能允许您在类提供此类方法时让该类中止其操作.但是,这可能不适用于Web服务器环境.

@H_301_5@默认超时

@H_301_5@如果类正在使用流函数,则可以设置默认超时:

@H_301_5@

ini_set('default_socket_timeout',5);
stream_context_set_default(array(
    'http' => array(
        'timeout' => 5,),));
@H_301_5@在单独的过程中执行

@H_301_5@您可以使用pcntl_fork()进行分叉,但这不适用于服务器环境.

@H_301_5@您还可以使用proc_openpopen在单独的进程中执行PHP脚本,如果运行时间过长则将其终止. (生成进程后,使用stream_select对进程’stdout流进行空闲等待.)

@H_301_5@或者设置服务器来处理这些任务.

angularjs – 我可以让一个函数在每个控制器在角度?

angularjs – 我可以让一个函数在每个控制器在角度?

如果我有一个效用函数foo,我想能够从我的ng-app声明中的任何地方调用。有没有我可以使它在我的模块设置全局访问,或者我需要将它添加到每个控制器的范围?
您基本上有两个选项,将其定义为服务,或将其放置在根范围。我建议你做一个服务,以避免污染根范围。您创建一个服务,并使其可用在您的控制器中,像这样:
<!doctype html>
<html ng-app="myApp">
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
    <script type="text/javascript">
    var myApp = angular.module('myApp',[]);

    myApp.factory('myService',function() {
        return {
            foo: function() {
                alert("I'm foo!");
            }
        };
    });

    myApp.controller('MainCtrl',['$scope','myService',function($scope,myService) {
        $scope.callFoo = function() {
            myService.foo();
        }
    }]);
    </script>
</head>
<body ng-controller="MainCtrl">
    <button ng-click="callFoo()">Call foo</button>
</body>
</html>

如果这不是一个选项,你可以将它添加到根范围,如下所示:

<!doctype html>
<html ng-app="myApp">
<head>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
    <script type="text/javascript">
    var myApp = angular.module('myApp',[]);

    myApp.run(function($rootScope) {
        $rootScope.globalFoo = function() {
            alert("I'm global foo!");
        };
    });

    myApp.controller('MainCtrl',function($scope){

    }]);
    </script>
</head>
<body ng-controller="MainCtrl">
    <button ng-click="globalFoo()">Call global foo</button>
</body>
</html>

这样,所有的模板都可以调用globalFoo(),而不必将它传递给控制器​​的模板。

apache - php可以发出请求执行代码时先执行另外一段代码么

apache - php可以发出请求执行代码时先执行另外一段代码么

就是像java的Filter一样
在执行真正的代码前把请求拦截下来然后执行处理程序
处理程序执行完后才执行请求的路径

回复内容:

就是像java的Filter一样
在执行真正的代码前把请求拦截下来然后执行处理程序
处理程序执行完后才执行请求的路径

有两种方法可以做到:

  • 使用auto_prepend_file,在php.ini中设置,例如:auto_prepend_file = "/home/linqq/libs/filter.php",当浏览器请求index.php, login.php等页面的时候,就会自动在处理index.php, login.php之前加载filter.php,这个功能出来很久了,一直养在深宫人未识,文档:http://www.php.net/manual/en/ini.core... http://qing.weibo.com/1657315521/62c8...
  • 使用类似Java里面Dispatcher Servlet的bootstrap文件,所有HTTP请求都指向此文件,再由此文件来调度,PHP里主流的MVC框架都是这样的自己写个简单的MVC也可,我2006年就是这样入手写框架的,第一个版本的框架源码只有7K

具体哪种方法好,就要靠女施主结合自己的项目情况实战一下再说了

单一入口可以实现,百度搜索即可了解,很多框架都是这么做的,别的还有什么方法就不清楚了

你说的请求是HTTP请求吗?
那么这个功能就是php框架的基本功能,拦截请求,做一些事
http://segmentfault.com/search?q=php+... 在SF搜索“php 框架”可以找到很多数据
另外Symfony2中文站的工程师驻守在SF,可以考虑Symfony2 http://symfony.cn/ 作为你的开发框架

c# – NUnit可以期待超时吗?

c# – NUnit可以期待超时吗?

我想测试一种我希望在特定情况下阻止的方法.

我尝试了TimeoutAttribute和ExpectedExceptionAttribute的组合:

[Test]
[Timeout(50),ExpectedException(typeof(ThreadAbortException))]
public void BlockingCallShouldBlock()
{
    this.someBlockingCall();
}

不幸的是,这不起作用,我读到的关于here的ThreadAbortException好像被NUnit本身抓住了.

有没有办法期待超时(使用NUnit)?

解决方法

对于这样的问题,我可能会使用 TaskTask.Wait(int)Task.Wait(TimeSpan).例如:
[Test]
public void BlockingCallShouldBlock()
{
    var task = Task.Run(() => SomeBlockingCall());
    var completedInTime = task.Wait(50); // Also an overload available for TimeSpan
    Expect(completedInTime,Is.False);
}

但是请注意,这将在后台线程上调用SomeBlockingCall,但对于大多数单元测试,这是一个非问题.

c# – 我可以简化这段代码吗?如果是这样的话

c# – 我可以简化这段代码吗?如果是这样的话

我正在尝试向我的第一个MVVM程序添加多个命令.
但我在这里添加它们的方式对我来说是错误的.
我想尽量避免重复,我可以制作一种我可以轻松修改的父命令吗?

internal class AddTimerBarCommand : ICommand
{
    public AddTimerBarCommand(Mainviewmodel viewmodel)
    {
        _Mainviewmodel = viewmodel;
    }

    private Mainviewmodel _Mainviewmodel;
    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _Mainviewmodel.AddTimerBar();
    }
}

internal class RmvTimerBarCommand : ICommand
{
    public RmvTimerBarCommand(Mainviewmodel viewmodel)
    {
        _Mainviewmodel = viewmodel;
    }

    private Mainviewmodel _Mainviewmodel;
    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _Mainviewmodel.RmvTimerBar();
    }

解决方法

您是否在寻找基类来减少代码重复?

如果是这样,这可能适合您:

internal abstract class TimerBarCommandBase : ICommand
{
    public TimerBarCommandBase(Mainviewmodel viewmodel)
    {
        _Mainviewmodel = viewmodel;
    }

    protected Mainviewmodel _Mainviewmodel;
    public event EventHandler CanExecuteChanged;

    public bool CanExecute(object parameter) { return true; }

    public abstract void Execute(object parameter);
}

internal class AddTimerBarCommand : TimerBarCommandBase
{
    public AddTimerBarCommand(Mainviewmodel viewmodel) : base(viewmodel) { }

    public override void Execute(object parameter)
    {
        _Mainviewmodel.AddTimerBar();
    }
}

internal class RmvTimerBarCommand : TimerBarCommandBase
{
    public RmvTimerBarCommand(Mainviewmodel viewmodel) : base(viewmodel) { }

    public override void Execute(object parameter)
    {
        _Mainviewmodel.RmvTimerBar();
    }
}

今天关于php – 我可以让一段代码超时吗?php设置超时时间的讲解已经结束,谢谢您的阅读,如果想了解更多关于angularjs – 我可以让一个函数在每个控制器在角度?、apache - php可以发出请求执行代码时先执行另外一段代码么、c# – NUnit可以期待超时吗?、c# – 我可以简化这段代码吗?如果是这样的话的相关知识,请在本站搜索。

本文标签: