当http请求完成时,GUI应用程序变得无响应

时间:2010-05-08 15:47:24

标签: php user-interface php-gtk

我刚刚创建了我的第一个适当的小桌面GUI应用程序,它基本上围绕SimpleTest Web测试用例包装GUI(php-gtk)界面,使其充当远程测试客户端。

每次本地Web测试用例运行时,它都会向我的服务器上的另一个SimpleTest案例(具有XHTML接口)发送HTTP请求。

该应用程序允许我运行一个本地测试,该测试整理来自多个远程测试的信息。它只有一个“开始测试”按钮,“停止测试”按钮和一个设置来增加/减少在每个HTTP请求中进行的远程测试的数量。每次测试运行大约需要一个小时才能完成。

麻烦的是,大多数时候应用程序正在发出http请求。此外,每当发出HTTP请求时,应用程序的GUI都没有响应。

我已经开始让应用程序在请求之间等待几秒钟(迭代Gtk :: main_iteration),以便让用户有时间重新调整窗口大小,按下Stop按钮等。但是,这使得整个测试运行的时间比必要的时间长。

<?php
require_once('simpletest/web_tester.php');

class TestRemoteTestingClient extends WebTestCase
 {

 function testRunIterations()
  {
  ...
  $this->assertTrue($this->get($nextUrl), 'getting from pointer:'. $this->_remoteMementoPointer);
  $this->assertResponse(200, "checking response for " . $nextUrl );
  $this->assertText('RemoteNodeGreen');
  $this->doGtkIterationsForMinNSeconds($secs);
  ...
  }

 public function doGtkIterationsForMinNSeconds($secs)
  {
  $this->appendStatusMessage("Waiting " . $secs);
  $start = time();
  $end = $start + $secs;

  while( (time()  < $end) )
   {
   $this->appendStatusMessage("Waiting " . ($end - time()));
   while(gtk::events_pending()) Gtk::main_iteration();
   }
  }
 }

有没有办法让应用程序保持响应,同时发出HTTP请求?

我正在考虑将应用程序拆分为两个,其中:

  • 测试控制器应用程序 - 充当设置编写器/报告读取器,并写入设置文件并读取报告文件。
  • Test Runner Application - 作为设置读者/报告编写者,每次迭代读取设置文件,运行测试,然后编写报告。

告诉它关闭 - 我会:

  • 按“测试控制器应用程序”上的停止按钮,
  • 写入设置文件
  • 由“Test Runner Application”
  • 读取
  • 停止,然后
  • 写入报告文件说它已停止
  • '测试控制器应用程序'读取报告并更新状态
  • 等......

然而,在我继续将应用程序分成两部分之前 - 我想知道是否还有其他明显的方法可以处理,这个问题。我怀疑这可能是非常普遍而且是一条很好的路径。

还有一种更简单的方法可以在位于同一台计算机上的两个应用程序之间发送消息吗?

1 个答案:

答案 0 :(得分:0)

您必须实施一些线程才能同时管理多个进程。这样,当您在后台执行其他任务时,您的应用程序将不会无响应。