我对nginx和Perl FCGI模块有点问题.我在我的FCGI程序中有一个很长的操作,可能比我用来与FCGI通信的Unix套接字另一端的服务器(或服务器上的用户)一样.我需要程序中的FCGI accept()循环才能在FCGI请求关闭时中断.我尝试安装INT,TERM等信号处理程序,但它们什么都不做,因为nginx和我的程序之间的唯一通信发生在FCGI套接字AFAIK上.
我也尝试了这个但是我无法看到在Perl中使用FCGI模块通过FCGI套接字向nginx发送原始数据或从nginx发送原始数据.有没有办法可以在不修改FCGI模块的情况下进行"ping"功能?
基本问题是我的程序不知道nginx是否已终止FCGI请求.
例:
#!/usr/bin/perl -w
use strict;
use FCGI;
my $fcgi_socket = FCGI::OpenSocket( '/tmp/test.socket', 100000 );
my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $fcgi_socket);
REQUEST: while($request->Accept() >= 0) {
#begin handling request
my $result = '';
while (1) { #or select(), etc
if (somehow check whether the fcgi $request is still live) {
next REQUEST;
}
#check for results, set $result if done
}
print $result;
}
Run Code Online (Sandbox Code Playgroud) 我正在做很多纹理上传(每秒60个VGA图像),它阻止了我的UI线程.从Qt 5.1 QGLWidget手册页(强调我的):
纹理上传一个线程.在线程中进行纹理上传对于处理需要显示的大量图像的应用程序非常有用,例如照片库应用程序.Qt通过现有的bindTexture()API支持此功能.一种简单的方法是创建两个共享QGLWidgets.一个在主GUI线程中变为当前,而另一个在纹理上载线程中变为当前.上传线程中的小部件从不显示,仅用于与主线程共享纹理.对于通过bindTexture()绑定的每个纹理,通知主线程以便它可以开始使用纹理.
什么?如何将基于QWidget的类(如QGLWidget)移动到线程?试图这样做会导致:
QObject::moveToThread: Widgets cannot be moved to a new thread
Run Code Online (Sandbox Code Playgroud)
我不明白文档建议我实现什么,以便将例如bindTexture()执行移出UI线程.
这里也提到了:Qt4/Opengl bindTexture在分离的线程中
虽然没有张贴代码.