我有一个DAL,它由一堆在我的数据库上执行LINQ查询的方法组成.
如何确保返回说,一个IEnumberable或从数据库中类似的事情之前,我保证LINQ查询执行,然后,而不是在一些延迟的方式才得以执行,使用的结果是什么时候?
我知道我可以在我的方法中调用.ToList()来强制它执行,但这是最好的方法吗?
有一个JavaScript函数,我无法控制代码,它调用我编写的函数.我的函数使用DOM生成一个iFrame,定义它的src,然后将它附加到另一个DOM元素.但是,在我的函数返回之前,因此允许继续执行包含函数,必须完全加载iFrame.
以下是我尝试过的事情以及它们不起作用的原因:
1. SetTimeout选项:
99.999%的时间,这是答案.事实上,在过去十年中我一直在使用JavaScript进行指导,我一直坚持认为代码总是可以重构以使用这个选项,并且从不相信存在情况并非存在的情况.好吧,我终于找到了一个!问题是因为我的函数被内联调用,如果在我的iFrame完成加载之前执行了下一行,那么我的脚本完全是neuters,并且从脚本完成的那一刻开始,外部脚本继续.各种回调都行不通
2."无所事事"循环:
您使用的此选项(// iFrame未加载){//不执行任何操作}.理论上,在加载帧之前不会返回.问题是,由于这会占用所有资源,因此iFrame永远不会加载.这个技巧,虽然非常不专业,很脏等,当你只需要一个内联延迟时,它会起作用,但由于我需要一个外部线程来完成,它不会.
在FF中,几秒钟后,它会暂停脚本并弹出一个警告,指出脚本没有响应.当警报启动时,iFrame能够加载,然后我的函数能够返回,但是让浏览器冻结10秒,然后要求用户正确地解除错误是不行的.
3.模型对话:
我受到以下事实的启发: FF弹出窗口允许iFrame加载,同时停止执行该功能,并考虑它,我意识到这是因为模态对话,是一种停止执行的方式但允许其他线程继续!很棒,所以我决定尝试其他模态选项.像alert()这样的东西工作得很漂亮!当它弹出时,即使只有1/10秒,iFrame也能完成,而且一切都很棒.如果1/10秒还不够,我可以将模型对话放在解决方案2的while循环中,这样可以确保iFrame及时加载.好吧?除了我现在必须弹出非常不专业的对话以供用户解雇才能运行我的脚本.我和自己一起讨论了这个动作的成本/收益,但后来我遇到了一个场景,我的代码在一个页面上被调用了10次!在访问页面之前必须关闭10个警报?!这让我想起了90年代后期的脚本儿童页面,并不是一个选择.
4.那里
有大量其他延迟脚本:大约有10个jQuery延迟或睡眠功能,其中一些实际上非常巧妙地开发,但没有一个工作.一些原型选项,再一次,我找不到可以做到的!十几个其他图书馆和框架声称他们拥有我需要的东西,但是他们都密谋给我一些虚假的希望.
我相信,由于内置模型对话可以暂停执行,同时允许其他线程继续,必须有一些代码可访问的方式来做同样的事情而不输出用户.
该代码实际上是成千上万行并且是专有的,所以我写了这个问题的小例子供你使用.请务必注意,您可以更改的唯一代码位于onlyThingYouCanChange函数中
测试文件:
<html>
<head>
</head>
</html>
<body>
<div id='iFrameHolder'></div>
<script type='text/javascript'>
function unChangeableFunction()
{
new_iFrame = onlyThingYouCanChange(document.getElementById('iFrameHolder'));
new_iFrame_doc = (new_iFrame.contentWindow || new_iFrame.contentDocument);
if(new_iFrame_doc.document)new_iFrame_doc=new_iFrame_doc.document;
new_iFrame_body = new_iFrame_doc.body;
if(new_iFrame_body.innerHTML != 'Loaded?')
{
//The world explodes!!!
alert('you just blew up the world! Way to go!');
}
else
{
alert('wow, you did it! Way to go!');
}
}
var iFrameLoaded = false;
function onlyThingYouCanChange(objectToAppendIFrameTo)
{
iFrameLoaded …Run Code Online (Sandbox Code Playgroud) 我有一个JQuery的.each循环,每次迭代调用一个参数的函数,有没有办法延迟这个函数调用?我已尝试过setTimeout,如下所示,但这不起作用,因为函数立即执行.
$.each(myArray, function (j, dataitem)
{
setTimeout(function () { showDetails(dataitem) }, 300);
});
function showDetails(dataitem)
{
...
}
Run Code Online (Sandbox Code Playgroud)
数组大小大约是20,我要做的是在一定的时间范围内分配函数调用而不是立即,任何想法如何实现这一点?我准备重写并重新调整函数的调用方式以完成这项任务,任何帮助都将受到赞赏.
javascript jquery javascript-events settimeout delayed-execution
我在这里遇到了设计问题,我将PHP和MySQL与Java结合使用(我的项目是一个Android应用程序).我必须决定如何定期运行一系列服务器端计算.这里有很多关于如何创建cron作业的材料,这很好,我很可能会在那里结束,但我不确定如何在更广泛的意义上解决我的项目的这一部分.
该应用程序完全以用户的地理位置为中心.它们总是以4到40之间的任意簇组织,这些簇在我的数据库中形成一个实例记录.这些实例可以随时变为活动或非活动状态.
对于我的数据库中的每个记录,或者,我更喜欢实例,在每个时代,我想从其用户位置重新计算实例的质心(这很容易,特别是使用标量方法,因为它们非常接近),有效地移动位置通过更新实例的数据库中的纬度和经度值来实例化实例.用户随后将在他们打电话回家时定期收到这些新的实例质心坐标.
由于我缺乏经验,这就是它变得混乱的地方.我开始时编写了一个相对简单的计算,涉及一个SQL选择查询和一个后续的SQL更新操作,每个实例,在每个时期.如果我们假设现在大约20-30秒的更新间隔,那不到一分钟,显然这违反了cron作业1分钟的限制.(应该注意的是,如果绝对必要的话,时期之间的时间差可以是硬编码的).
在短期内,由于实例/集群很少,因此这个过程可能只需要花费的时间可以忽略不计.但是,如果实例的数量达到数千个,那么它可能会堆积很多SQL查询并且需要花费大量时间来处理所有计算......为了减少不必要的负载,我自然想要结合一些机制来排除非活动实例,但我想仍然可以想象所需的计算时间可能超过时期间隔.我想这是(很多)以后的问题.
就目前而言,问题是双重的:
我目前的做法如下:
以上方法听起来不错吗?在这一点上,我打算这样做,除非有更好的建议.我真的没有办法确定如何安排任务在每个时代执行(第4点),但是......我看了很多地方,我自己无法解决这个问题没有一些指导,我还不是很好.:)一如既往,任何建议将不胜感激.
什么是阻止机器人,恶意用户等执行PHP脚本太快的最佳方法?如果我使用usleep()或sleep()函数暂时只做"没有"(在所需的代码执行之前),或者是那种简单的愚蠢并且有更好的方法可以吗?
例:
function login() {
//enter login code here
}
function logout() {
//enter logout code here
}
Run Code Online (Sandbox Code Playgroud)
如果我只是说,usleep(3000000)在登录和注销代码之前,那是没关系,还是更好,更明智的方式来实现我想要实现的目标?
编辑:根据下面的建议,那么usleep或者sleep只是使处理器脱离当前用户正在执行的当前脚本,还是导致它脱离整个服务?即如果一个用户+脚本调用sleep/ usleep,所有并发用户+脚本也会被延迟吗?
我希望能够单独取消延迟选择器.我可以做他的,[NSObject cancelPreviousPerformRequestsWithTarget...]但需要所有的方法参数来做到这一点.在我想取消的地方,我没有.
有没有办法获得与用于延迟选择器的参数一起延迟的选择器列表?
当然,解决方法是仅跟踪参数.或者使用GCD并使我的选择器(现在是块)检查它们是否应该立即返回.
我有一个需要微秒延迟的驱动程序.为了创建这个延迟,我的驱动程序正在使用内核的udelay函数.具体来说,有一个调用udelay(90):
iowrite32(data, addr + DATA_OFFSET);
iowrite32(trig, addr + CONTROL_OFFSET);
udelay(30);
trig |= 1;
iowrite32(trig, addr + CONTROL_OFFSET);
udelay(90); // This is the problematic call
Run Code Online (Sandbox Code Playgroud)
我们的设备存在可靠性问题.经过大量的调试,我们在90us过去之前将问题追溯到驱动程序恢复.(参见下面的"证据".)
我在Intel Pentium Dual Core(E5700)上运行内核版本2.6.38-11-generic SMP(Kubuntu 11.04,x86_64).
据我所知,文档声明udelay将延迟执行至少指定的延迟,并且是不可中断的.这个版本的内核是否有错误,或者我是否误解了udelay的使用?
为了说服自己这个问题是由于udelay过早返回引起的,我们向其中一个I/O端口提供了一个100kHz的时钟,并按如下方式实现了我们自己的延迟:
// Wait until n number of falling edges
// are observed
void clk100_delay(void *addr, u32 n) {
int i;
for (i = 0; i < n; i++) {
u32 prev_clk = ioread32(addr);
while (1) {
u32 clk = ioread32(addr);
if (prev_clk && !clk) { …Run Code Online (Sandbox Code Playgroud) 计算机程序的结构和解释一书介绍了一个记忆过程如下:
(define (memo-proc proc)
(let ((already-run? false) (result false))
(lambda ()
(if (not already-run?)
(begin (set! result (proc))
(set! already-run? true)
result)
result))))
Run Code Online (Sandbox Code Playgroud)
在提出延迟执行的定义的同时,(delay <exp>)是(memo-proc (lambda () <exp>))。可以使用以下过程强制延迟对象:
(define (force delayed-object)
(delayed-object))
Run Code Online (Sandbox Code Playgroud)
在给出这些定义的章节中,计算是使用流完成的。每个流都是一对,有一个头部和一个延迟尾部。
但是,我不知道如何在不使用查找表或其他累积先前调用的数据结构的情况下实现记忆化。
包括这些定义的章节在这里。
当我们用各种参数记住单个过程时,查找表会很有用。然后,我们将参数作为键,将过程的结果作为值。在这种情况下,我们有空过程,因此我们不需要查找表。我们所需要的只是我们迄今为止创建的一组延迟对象。但是,这里使用了闭包。
根据memo-proc上面的定义,每个延迟对象实际上是一个带有值already-run?和的闭包result,它们都初始化为false。但是,由于调用中的每个延迟对象proc都有自己的闭包和自己的本地already-run?和result,因此修改它们不会更改调用树中的其他对象。因此,我觉得任何其他程序都不会再读取记忆值。
所以我的问题是,我在想什么,或者对一切如何运作的正确解释是什么?
在 C++ 中,有没有一种简单的方法可以在特定延迟后发生某些事情?在Python中,我只使用frame.after(ms,myFunction),这很好又简单——这在C++中似乎是一个更棘手的问题!之前有人建议我使用 Sleep(),不幸的是,这不起作用,因为我正在为《半条命 2》编写 mod,如果我使用 Sleep,那么整个游戏会挂起 X 秒,而不是在 X 之后调用事件秒。那么有没有另一种方法可以在特定延迟后调用函数而不使用睡眠呢?
目标:
当用户在文本框中键入字符时,会出现一个按钮.当用户使用退格键清除文本框但按住该键几秒钟时,立即隐藏按钮.
问题:
如果用户键入单个字符,并使用退格键将其删除 - 通过按住退格键几秒钟 - 隐藏按钮之前会有一段延迟.仅当用户只键入一个字符然后按住退格键而不放手时才会发生这种情况.如果用户输入多个字符,然后按住退格键直到文本框为空,则隐藏按钮没有延迟.
<input type="text" id="tbox"></text>
<button type="button" id="btn" style="display:none;">push me</button>
$('#tbox').on('keydown keypress keyup',function(){
if($('#tbox').val() !== '') {
$('#btn').css({'display':'block'});
} else {
$('#btn').css({'display':'none'});
}
});
Run Code Online (Sandbox Code Playgroud)
的jsfiddle:
javascript ×3
jquery ×2
php ×2
c# ×1
c++ ×1
delay ×1
driver ×1
kernel ×1
linq ×1
linq-to-sql ×1
linux ×1
memoization ×1
mysql ×1
objective-c ×1
recurring ×1
scheme ×1
settimeout ×1
sicp ×1
stream ×1