我使用MFC为GUI按钮编写了C++事件驱动的应用程序,我使用像onmousedown这样的HTML事件来触发网页中的一些Javascript.当您使用接口并且事件是硬编码时,事件驱动编程的想法是直观的.
我知道如何在C中使用函数指针,我看到Windows如何使用它们来运行事件循环.我可以编写代码来动态调用不同的函数.
我的问题是,从编译时转移到运行时.我在这里谈论任何语言,但如果您需要一种语言,请选择Javascript或PHP,因为我最近使用它们.我完全没有掌握如何使用自己的事件对象来完成任务.这不是我得到的概念.由于我不使用它们,我不知道它们的实际用途是什么.
例如,我想如果我想制作一个自定义的回合制游戏,那么我可能会使用事件对象来表示一些只需要"发生"的游戏片段能力的效果.
有人能给我一个简单的自定义事件吗?或者有用或实用的情况?它在很大程度上取决于语言和环境以及如何处理事件?一个Javascript答案会很好,但我读了很多语言.
对不起,我只是缺乏这方面的东西,需要一些实用,先进(中级?)的见解.它就像是C中的指针.我"得到"指针以及它们是你的朋友.但有一段时间我没有,而我认识的许多人仍然没有.一旦你得到它就很简单,我就是不会那样获得自定义的动态事件.
请帮我理解这个.
你有一个函数调用几个方法:
function() {
methodA(function(){...});
methodB();
methodC();
}
Run Code Online (Sandbox Code Playgroud)
从没有回调或匿名函数的语言我习惯了这样的事实,即在方法返回之前执行不会继续.
因此,如果我使用回调调用methodA,则执行必须等到方法返回时才会异步,对吧?
因此,例如,我可以将回调存储到某个对象并让methodA返回.然后执行methodB和methodC.当用户单击一个按钮时,某个处理程序会执行回调吗?
我得出的结论是,与java或python(不涉及多线程)相比,javascript没有异步....因为在java中,回调不是闭包/匿名方法,而是具有"execute"方法的对象它会完全相同,只是有点复杂......当然,这个JS事件系统特定于DOM
在Mac OS X上,Cocoa是事件驱动的.我的意思是每个东西都是由UI驱动的 - 用户点击某个东西或移动某个区域会导致调用事件处理程序.Main简单地调用NSApplicationMain(),它会创建一个无限循环,直到程序退出.
那些不是用户驱动的任务呢?我会在哪里放置需要在后台工作的任务来提供程序的基本功能?例如,Photo Booth在用户与UI交互时执行某些操作(即,当用户单击某个按钮时更改为摄像机).但是,Photo Booth还不断从相机中检索帧以提供视频流.
所以我的问题是非UI任务代码在哪里?Main()实际上不是一种可能,因为我需要在程序的整个生命周期中运行任务,而不是在程序刚启动时运行.
我在Mac OS X Snow Leopard上(我想要一些适用于所有Mac系统的东西:即Lion OS X)并在Xcode中使用Obj-C Cocoa应用程序.
我一直在尝试开发一个简单的事件驱动模拟器,并从这里开始
http://stdcxx.apache.org/doc/stdlibug/11-3.html
当我正在玩这个例子进行一些修改时,我遇到了一个条件,当两个事件(到达,离开)同时发生时(比如在时间单元5),然后模拟器只是弹出顶部的任何东西事件队列可以从下面的代码片段中看到.
void simulation::run () {
while (! eventQueue.empty ()) {
event * nextEvent = eventQueue.top ();
eventQueue.pop ();
time = nextEvent->time;
nextEvent->processEvent ();
delete nextEvent;
}
}
Run Code Online (Sandbox Code Playgroud)
如果两个事件同时发生,我如何强制执行始终在出发事件之前弹出特定事件(首先到达事件)的条件.
任何帮助深表感谢.
我正在努力了解Redis的基础知识.一直到处都是,Redis是单线程的,它使事情成为原子.但是我无法想象它是如何在内部工作的.我有一点疑问.
我们不设计服务器单线程,如果它是IO绑定应用程序(如Node.js),其中线程在启动IO操作后获得另一个请求,并在IO操作完成后将数据返回给客户端(提供并发).但是在redis的情况下,所有数据都可以在主内存中找到,我们根本不打算进行IO操作.那么为什么Redis是单线程的?如果第一个请求需要花费很多时间会发生什么,剩下的请求将不得不保留等候?
我正在Qt做我的第一个项目,我遇到了问题.我知道在SO nad Qt论坛上有很多类似的请求,但是没有人回答我的问题.
我想停止程序执行并等待按钮的单击.或多或少的情况:
slot1() {
for (int i=0; i<10; i++) {
/*
* some code
*/
// STOP EXECUTION - WAITING FOR THE BUTTON PRESSED
/*
* the rest of code
*/
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这与事件驱动的编程相反,但项目的要求(当然是研究的任务)需要这种方式.这对我来说非常重要,所以请 - 给出可能的解决方案:)
Javascript可以模拟用户交互。
任何脚本可以像模拟用户交互click或focus在网页上的特定元件上,通过使用方法.click()和.focus()。
例:
const square = document.getElementsByClassName('square')[0];
const clickSquare = () => {
event.target.dataset.receivedAction = 'click';
event.target.innerHTML = '<p>I\'ve been clicked!</p>';
}
const clearSquare = () => {
square.removeAttribute('data-received-action');
square.innerHTML = '';
}
square.addEventListener('click', clickSquare, false);
const clickButton = document.querySelector('[data-deliver-action="click"]');
const clearButton = document.querySelector('[data-deliver-action="clear"]');
clickButton.addEventListener('click', () => square.click(), false);
clearButton.addEventListener('click', clearSquare, false);Run Code Online (Sandbox Code Playgroud)
.square {
display: block;
width: 120px;
height: 120px;
margin: 12px 6px;
text-align: center;
font-family: arial, helvetica, sans-serif;
font-weight: bold;
font-size: …Run Code Online (Sandbox Code Playgroud)根据我的理解,getCharacter()的方法KeyEvent应该返回一个char类型。
例如,如果我必须检查键入的键是否是数字,我可以使用Character.isDigit(e.getCharacter())not Character.isDigit(e.getCharacter().charAt(0))。
e.getCharacter().length()我还通过打印it always returns来检查返回字符串的长度1。该字符串有任何解释或其他用法吗?
event-driven ×8
javascript ×3
c++ ×2
asynchronous ×1
callback ×1
cocoa ×1
dom-events ×1
events ×1
java ×1
javafx ×1
keyevent ×1
nsrunloop ×1
qt ×1
redis ×1