我试图confirm()在Javascript中覆盖标准方法(制作一个漂亮的UI和东西).我已经阅读了100篇"无法完成"的帖子,但我不想放弃,直到我给它一个公平的镜头.:)
所以,真正的问题当然是该confirm()方法必须阻止所有javascript执行,直到用户选择一个选项.那么,Javascript中有哪些阻塞行为的方法呢?我已经能够拿出5:
alert() - 不适合我,因为它显示了自己不需要的UI;confirm()- 同样的问题alert();XmlHttpRequest 在同步模式 - 排序,但它涉及服务器......showModalDialog() - 很好,但我需要一个特定的设计,还有一些浏览器兼容性要求......到目前为止,我最好的方法是创建一个<iframe>带有提示符(然后获取自己的javascript执行线程)并阻止,XmlHttpRequest直到用户选择了一个选项<iframe>.不幸的是,这涉及在服务器之间反复传递结果,我想让这个100%客户端.此外,它在打开对话框时占用服务器线程,并且可能存在一些适用于浏览器的特定ajax超时.
任何人都可以想到阻止执行的任何其他Javascript方法,这些方法可能(ab)用于实现所需的效果吗?
我想用服务器和客户端写一个gomoku游戏,终端版本运行良好,但pygame版本刚刚被阻止,无法兑换任何东西
这是游戏执行功能
首先,它启动套接字连接
self._running = True在init,从服务器获取包就像{"grid":GRID(strings with 0 and 1), "x":X, "y":Y, "player":LAST_PLAYER, "next_player":CURRENT_PLAYER, "gameover":IS_GAMEOVER}
在循环中:
on_event并让用户移动(我怀疑这一步是错误的,所以解析包步骤阻止了主线程?但是我应该怎么解决这个问题)然后将新的移动包发送到服务器这就像循环一样
while self._running:
data = self.client_thread.reply_q.get(True)
if data:
self.last_player = data["player"]
self.grid = self.grid_str_2_matrix(data["grid"])
self.lastPosition = [data["x"], data["y"]]
self.gomoku_board_init()
if data["gameover"] == -1:
if data["next_player"] != self.player:
self.client_thread.cmd_q.put(ClientCommand(ClientCommand.SEND, {"wait": True}))
print("waiting")
else:
for event in pygame.event.get():
self.on_event(event)
print("new move")
else:
print("game over")
self._running = False
if data["gameover"] == 0:
self.winner = 0 …Run Code Online (Sandbox Code Playgroud) 使用Qt,我试图以非阻塞的方式读取stdin流的内容.当套接字收到一些新数据时,我正在使用QSocketNotifier来提醒我.通知程序的设置如下所示:
QSocketNotifier *pNot = new QSocketNotifier(STDIN_FILENO, QSocketNotifier::Read, this);
connect(pNot, SIGNAL(activated(int)), this, SLOT(onData()));
pNot->setEnabled(true);
Run Code Online (Sandbox Code Playgroud)
该onData()插槽看起来是这样的:
void CIPCListener::onData()
{
qDebug() << Q_FUNC_INFO;
QTextStream stream(stdin, QIODevice::ReadOnly);
QString str;
forever
{
fd_set stdinfd;
FD_ZERO( &stdinfd );
FD_SET( STDIN_FILENO, &stdinfd );
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 0;
int ready = select( 1, &stdinfd, NULL, NULL, &tv );
if( ready > 0 )
{
str += stream.readLine();
}
else
{
break;
}
}
qDebug() << "Recieved data:" << str;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在尝试使用select()系统调用来告诉我何时我的数据用完了.但是,在实践中发生的事情是,在我读完第一行文本后,select()调用返回0.因此,例如,如果我向进程的stdin流写入5行文本,我只读过第一行. …
在Linux中,当您进行阻止i/o调用(如读取或接受)时,实际发生了什么?
我的想法:进程从运行队列中取出,在某个等待队列上进入等待或阻塞状态.然后当建立tcp连接(用于接受)或硬盘驱动器准备就绪或读取文件时,会引发硬件中断,让那些进程等待唤醒并运行(在文件读取的情况下,如何linux知道要唤醒什么进程,因为可能有很多进程在等待不同的文件?).或者也许不是硬件中断,单个进程本身轮询以检查可用性.不确定,有帮助吗?
系统是Linux(Gentoo x64),代码是C++.我有一个守护程序应用程序,其中几个实例在同一台机器上运行.该应用程序本身就是多线程的.一段时间以来,我一直在观察其性能的奇怪延迟.
在放了一些调试代码之后,当一个守护进程的几个实例同时阻塞时,我想出了一个奇怪的事情,据说这是由某些外部原因引起的.简而言之,我有一个这样的序列:
std::list::push_back()/ pop_back() (即非常简单的数学运算)有时,我清楚地看到上面的序列在几个独立的(!)进程中运行,在第2步(或步骤4中的probaby)处理了一些关于步骤3中数学的过多时间(例如,0.5 - 1.0秒) ).作为证据,我看到所有进程的日志中的t2实际上是相同的(在几微秒内不同).看起来这些进程的某些线程在相对不同的时间进入该部分(我可以清楚地看到t1的 0.5-1秒差异),锁定互斥锁,并在相同的时间解锁,据称在锁定中花费了不合理的时间根据log(t2 - t1差异).看起来令人毛骨悚然.
该问题的表现相对较少,在中等负荷下约5-10分钟.测试中没有记录NTP时间偏移(这实际上是我的第一个想法).如果是NTP,则服务中不存在实际延迟,只有日志中的错误时间.
我从哪里开始?我是否开始调整调度程序?什么理论上可以阻止Linux中的整个多线程进程?
当Java程序调用System.out.println()或Scala程序调用println()时,线程是否阻塞?
我正在编写一个带有大量子任务的Scala程序.每个子任务都在Future中执行.建议actor和future内的代码不会阻塞,以便后续任务也不必等待.但我想在控制台上打印很多.
如果是阻塞操作:我可以做些什么来优化性能?
当然,我可以尝试减少输出量或收集StringBuilder中的一些输出并将它们一起打印,这样可以减少输出操作的数量.
是的,这个问题已经以各种方式得到了回答,其中没有一个是以符合我需要的方式回答的.因此,我问我的具体情况.
我已经尝试过,可能有5到6种不同的方法在我家里的备用电脑上设置邮件(SMTP)服务器,我也设置运行我的网站.我的ISP阻止了几个端口,如80和25,允许托管Web服务器,邮件服务器,FTP服务器.幸运的是,我的域名注册商有办法将我的流量转发到特定的端口,然后我在我的路由器中使用了一些选项进行端口转换,并从我的注册商网站上的帐户设置中指定的一个端口重定向流量到端口80我的网络服务器计算机,工作得很好,我的网站已经启动.
但是,我发现默认情况下,在设置MX记录以便我可以设置邮件服务器时,默认情况下他们的系统会将流量发送到端口25.(所以我可以指定的Web服务器指针:012.345.678.910:8080,MX记录必须像mail.mydomain.com或者只是mydomain.com.他们的选项(目前)没有办法为网站指定一个端口.所以,我猜测这是一个2部分的问题.1.我刚刚选择了一个糟糕的域名注册商;或者具体来说,这是一个默认由很多其他域名注册商提供的功能,我只是错过了吗?2.有没有其他方法可以实现这一点?我的ISP收费并为解锁端口25的商业帐户支付了一条腿,我不想走那条路.我知道你可以设置你的SMTP服务器来监听和在不同的端口上发送流量,但如果我的域名注册商的MX记录仍然转发到端口25进行无效,这对我没有好处 邮件.任何有关此事的帮助或建议将不胜感激.谢谢.
编辑:
我遗漏了一个明显的可能性,即我可能搞砸了我的设置,因为我之前从未成功设置过SMTP服务器,所以我对此很陌生.遗憾的是,我是否可能对邮件服务器的运行方式感到困惑,是否存在ISP阻止端口副传出的传入流量的差异或可能性?我的意思是,我很困惑,如果我已经正确设置了一切,我是否能够接收(监听)或端口25无论如何,然后必须在未阻塞的smtp端口上发送外发邮件?
我还没有尝试从我的服务器发送邮件,因为我不想让设置错误,然后将我的IP列入黑名单,所以我只是尝试尝试接收电子邮件,因为我我说过,我已经尝试了大约5或6(所有非常令人困惑,看似不完整或不太详细)的教程,如何设置SMTP服务器,我还没有收到传入的邮件.作为一个个人说明,我在搜索和阅读的几个教程中看起来很奇怪,就安装postfix的第一部分而言,没有一个与下一个几乎没有任何相似之处; 从那里,一切都变得与众不同.如果确实发生了什么,这无助于我理解我可能做错了什么.最后,为了保持连续性,我确实去了http://port25.icannotconnect.com/,它确实说了"BLOCKED".
再次感谢.
我有时会发现在clocked always块中使用"局部变量"的阻塞赋值很有用.这可以帮助减少重复的代码.
为了避免在不同的always块中意外使用相同的变量(对于模拟来说可能是非确定性的),我想给它本地范围.有一个很好的综合方式吗?
就像是:
module sum3(
input clk,
input [7:0] in1,
input [7:0] in2,
input [7:0] in3,
output reg [7:0] result,
output reg [7:0] result_p1);
begin :sum
reg [7:0] sum_temp; // local variable
always @(posedge clk) begin
sum_temp = in1 + in2 + in3;
result <= sum_temp;
result_p1 <= sum_temp + 1;
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
(ModelSim似乎没问题,但Synplify似乎不喜欢它.)
请注意,我的问题的无关信息将被"引用"
像这样(随意跳过这些).
问题
我正在使用节点代表多个客户端发出有序HTTP请求.这样,最初使用几个不同的页面加载来获得所需结果的内容现在只通过我的服务器接受一个请求.我目前正在使用'async'模块进行流量控制,使用'request'模块进行HTTP请求.大约有5个回调,使用console.time,从开始到结束大约需要2秒钟(下面包含草图代码).
现在我对节点缺乏经验,但我知道节点的单线程特性.虽然我已多次读过该节点不是为CPU绑定任务而构建的,但直到现在我才真正理解这意味着什么.如果我对正在发生的事情有正确的理解,这意味着我目前拥有的(正在开发中)不会扩展到甚至超过10个客户端.
题
由于我不是节点的专家,我问这个问题(在标题中)得到确认,确保几个连续的HTTP请求确实是阻塞的.
结语
如果是这种情况,我希望我会问一个不同的SO问题(经过适当的研究)讨论各种可能的解决方案,我应该选择继续在节点中解决这个问题(这本身可能不适合我正在尝试的去做).
其他结束的想法
我真的很抱歉,如果这个问题不够详细,太苛刻,或者语言特别华丽(我试着简明扼要).
感谢所有能帮我解决问题的人!
我之前提到的代码:
var async = require('async');
var request = require('request');
...
async.waterfall([
function(cb) {
console.time('1');
request(someUrl1, function(err, res, body) {
// load and parse the given web page.
// make a callback with data parsed from the web page
});
},
function(someParameters, cb) {
console.timeEnd('1');
console.time('2');
request({url: someUrl2, method: 'POST', form: {/* data */}}, function(err, res, body) {
// more computation
// make a callback with a session …Run Code Online (Sandbox Code Playgroud) 我想编写一个程序,它的主线程派生一个新线程进行计算并等待它完成一段时间。如果子线程没有在给定时间内完成,它就会超时并被杀死。我有以下代码。
import Control.Concurrent
fibs :: Int -> Int
fibs 0 = 0
fibs 1 = 1
fibs n = fibs (n-1) + fibs (n-2)
main = do
mvar <- newEmptyMVar
tid <- forkIO $ do
threadDelay (1 * 1000 * 1000)
putMVar mvar Nothing
tid' <- forkIO $ do
if fibs 1234 == 100
then putStrLn "Incorrect answer" >> putMVar mvar (Just False)
else putStrLn "Maybe correct answer" >> putMVar mvar (Just True)
putStrLn "Waiting for result or timeout"
result …Run Code Online (Sandbox Code Playgroud) blocking ×10
c++ ×2
linux-kernel ×2
nonblocking ×2
asynchronous ×1
concurrency ×1
haskell ×1
http ×1
java ×1
javascript ×1
linux ×1
mutex ×1
node.js ×1
pygame ×1
python ×1
qt ×1
scala ×1
scheduler ×1
scope ×1
smtp ×1
sockets ×1
stdin ×1
synchronous ×1
timeout ×1
verilog ×1