标签: event-loop

进入Qt事件循环后如何自动执行一个方法?

我想执行一个只能在QApplication显示my 后调用的方法,即当它进入主事件循环时exec_()。我是 Qt4 的新手(使用 PyQt4):我希望有一个类似on_start()的回调,但没有找到。我需要创建一个线程或一个计时器吗?或者 API 中是否已经包含了一些回调?

python multithreading timer event-loop pyqt4

4
推荐指数
2
解决办法
4482
查看次数

一种使键盘事件队列既响应又不占用整个CPU功率的方法

我正在做一个Sdl游戏,它是2D射手.我正在使用SDL导入曲面和OpenGL在屏幕上绘制它们(这样做是因为它比SDL更快地工作).我有两个线程正在运行,一个用于处理东西和渲染,另一个用于输入.基本上,处理一个占我CPU的1-2%,而输入循环需要25%(在四核上,所以它是1个全核).我尝试在每个之前做SDL_Delay(1)while (SDL_PollEvent(&keyevent)),它的工作原理!整个过程将CPU负载降低至3%.然而,这是一个令人讨厌的副作用.整个程序的输入是残疾人:它不检测所有按下的键,例如,以使角色移动,有时需要长达扑键盘为它作出反应的3秒.

我也试过用解决它SDL_PeepEvent()SDL_WaitEvent(),但是,它是造成相同的(很长!)延迟.

事件循环代码:

void GameWorld::Movement()
{
    SDL_Event keyevent;
    bool x1, x2, y1, y2, z1, z2, z3, m;         // Booleans to determine the
    x1 = x2 = y1 = y2 = z1 = z2 = z3 = m = 0;   // movement direction
    SDL_EnableKeyRepeat(0, 0);
    while (1)
    {
        while (SDL_PollEvent(&keyevent))
        {
            switch(keyevent.type)
            {
            case SDL_KEYDOWN:
                switch(keyevent.key.keysym.sym)
                {
                case SDLK_LEFT:
                    x1 = 1;
                    x2 = 0;
                    break;
                case SDLK_RIGHT:
                    x1 = 0;
                    x2 = 1; …
Run Code Online (Sandbox Code Playgroud)

c++ windows sdl event-loop

4
推荐指数
1
解决办法
2700
查看次数

浏览器中的事件循环和任务队列之间有区别吗?

我对这个问题的答案中的一些术语感到有些困惑:JavaScript中的事件优先级是什么?

事件循环和任务队列之间有区别吗?这些队列有多大?

因为当我使用setInterval()设置Interval并使用alert()中断它时,会在警报显示的时间内删除间隔.

javascript event-loop javascript-events setinterval task-queue

4
推荐指数
1
解决办法
2422
查看次数

Node.js Uncaught TypeError:callback不是process.nextTick中的函数

我收到以下错误.它显然来自传递给的回调process.nextTick.鉴于堆栈跟踪几乎无法使用,我该如何调试?幕后发生了什么,如何在更大的项目中解决这个问题?

TypeError: callback is not a function
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickDomainCallback (node.js:390:13)
Run Code Online (Sandbox Code Playgroud)

NB早期版本的Node具有不同的实现process.nextTick,并吐出以下堆栈跟踪.

Uncaught TypeError: undefined is not a function
    at process._tickCallback (node.js:415:13)
Run Code Online (Sandbox Code Playgroud)

event-loop node.js

4
推荐指数
1
解决办法
4814
查看次数

Python Windows`msvcrt.getch()`仅检测每个第三个按键?

我的代码如下:

import msvcrt
while True:
    if msvcrt.getch() == 'q':    
       print "Q was pressed"
    elif msvcrt.getch() == 'x':    
       sys.exit()
    else:
       print "Key Pressed:" + str(msvcrt.getch()
Run Code Online (Sandbox Code Playgroud)

此代码基于此问题 ; 我用它来熟悉自己getch.

我注意到按3次键需要3次输出文本一次.为什么是这样?我正在尝试将它用作事件循环,这太过于滞后......

即使我键入3个不同的键,它也只输出第3个按键.

我怎么能强迫它走得更快?有没有更好的方法来实现我想要实现的目标?

谢谢!

evamvid

python msvcrt getch event-loop python-2.7

4
推荐指数
1
解决办法
2万
查看次数

当滚动控制台窗口时,Node.js停止

如果在Windows下的Node.js中运行以下脚本(至少8个)

const init = +new Date;
setInterval(() => {
    console.log(+new Date - init);
}, 1000);
Run Code Online (Sandbox Code Playgroud)

并拖动控制台窗口滚动条的拇指,脚本的输出看起来类似于

1001
2003  // long drag here
12368 // its result
13370
14372
Run Code Online (Sandbox Code Playgroud)

看起来Node.js的事件循环在滚动期间停止.http包内的异步操作也应该发生同样的事情.因此,留下可见的终端窗口对正在运行的服务器是危险的.

如何更改代码以避免此类行为?

windows performance event-loop node.js

4
推荐指数
2
解决办法
302
查看次数

如何找出阻碍 Node.js 退出的原因?

我在编写各种 Node.js 脚本时经常遇到这个问题。一切完成后,他们并没有退出。通常,它是一个未封闭的套接字或 readline 接口。

当脚本变得更大时,这真的很难发现。有没有某种工具可以告诉我 NodeJS 还在等什么?我正在寻求一个通用的解决方案,该解决方案将有助于调试 NodeJS 在应该退出时未退出的所有情况。

样品:

图表 I. - 即使在侦听器被删除后,进程标准输入也会阻塞节点

const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
if (typeof process.stdin.setRawMode == "function")
    process.stdin.setRawMode(true);


const keypressListener = (stream, key) => {
    console.log(key);
    process.stdin.removeListener("keypress", keypressListener);
}
process.stdout.write("Press any key...");
process.stdin.on("keypress", keypressListener);
Run Code Online (Sandbox Code Playgroud)

图表二。-readline如果您忘记关闭界面,则会阻塞 Node

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
Run Code Online (Sandbox Code Playgroud)

图表三。- 忘记setInterval也会阻塞节点,祝你好运找到它

setInterval(() => { }, 2000);
Run Code Online (Sandbox Code Playgroud)

javascript debugging event-loop node.js

4
推荐指数
1
解决办法
1580
查看次数

nodejs (libuv) 事件循环是否在一个阶段(队列)中执行所有回调,然后再进入下一阶段或以循环方式运行?

我正在研究 Node.js 中 libuv 提供的事件循环。我看到了Deepal Jayasekara 的以下博客,还在 YouTube 上看到了 Bert Belder 和 Daniel Khan 的解释。

有一点我不清楚 - 根据我的理解,事件循环在进入另一阶段之前处理一个阶段的所有项目。因此,如果是这种情况,如果 setTimeout 阶段不断添加回调,我应该能够阻止事件循环。

然而,当我尝试复制这一点时,它并没有发生。以下是代码:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  console.log("Response sent");
  res.end();
}).listen(8081);


setInterval(() => {
  console.log("Entering for loop");
// Long running loop that allows more callbacks to get added to the setTimeout phase before this callback's processing completes
 for (let i = 0; i < 7777777777; i++); 
 console.log("Exiting for loop");
}, 0); …
Run Code Online (Sandbox Code Playgroud)

javascript event-loop node.js

4
推荐指数
1
解决办法
1195
查看次数

如果javascript“async”函数的主体中没有“await”,它是否会以任何不同的方式执行?

来自 MDN

异步函数通过事件循环以与其余代码不同的顺序运行,

但是,我不明白这对于一个不显式返回任何内容并且根本不使用 await 的简单函数意味着什么。在这种情况下声明一个函数 async 有什么用吗?它是否会在稍后执行以允许页面响应,例如在执行时?我的测试表明它是同步执行的,根本没有延迟:

async function foo() {
  console.log('Start heavy stuff');
  for (let i = 0; i < 90000000; ++i) {
    Math.random()
  }
  console.log('Fnish heavy stuff')
}

foo();
console.log('All done, synchronously');
Run Code Online (Sandbox Code Playgroud)

日志按预期顺序显示,那么在这种情况下可以使用使此函数异步吗?这与使用 调用此函数有任何相似之处setTimeout(foo, 0)吗?

javascript event-loop async-await

4
推荐指数
1
解决办法
123
查看次数

Nodejs - 可以在线程池大小为 4 的同时运行的最大线程是多少?

要求是每秒1000个并发请求和每个请求的数据库查询等IO操作。由于 nodejs 在事件循环上工作,它将 IO 操作分配给线程池,但线程池默认大小为 4,因此同时最多 4 个线程(IO 操作)可以工作,其余必须在队列中等待。一旦任何线程完成执行,它们就可以进行处理。

查询 1 - 我们可以根据需要将线程池大小增加到 N 数,它会提高性能还是会降低性能?

查询 2 - 我们如何在 nodejs 中实现上述要求?

查询 3 - Nodejs 是此要求或其他建议(例如 golang)的空闲选择

multithreading event-loop threadpool node.js

4
推荐指数
1
解决办法
3309
查看次数