【问题标题】:GUI Application becomes unresponsive while http request is being done在完成 http 请求时,GUI 应用程序变得无响应
【发布时间】:2010-05-08 15:47:23
【问题描述】:

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

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

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

问题在于,应用程序大部分时间都在发出 http 请求。此外,无论何时发出 HTTP 请求,应用程序的 GUI 都没有响应。

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

<?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 应用程序 - 充当设置读取器/报告编写器,每次迭代读取设置文件,运行测试,然后编写报告。

所以告诉它关闭 - 我会:

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

但是,在我继续将应用程序一分为二之前 - 我想知道是否还有其他明显的方法来处理这个问题。我怀疑这可能很常见,而且是一条人迹罕至的道路。

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

【问题讨论】:

    标签: php user-interface php-gtk


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 2019-12-03
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2013-01-08
    相关资源
    最近更新 更多