我正在研究一个多线程系统,该系统涉及线程通知其父对象的破坏.问题是,我需要允许该对象保持足够长的时间以使此事件读取此对象,因为我将对象作为事件参数之一传递.目前,当触发此事件时,传递给事件的对象已从线程内销毁.
我不希望线程必须等待此事件完成,而是知道何时触发此事件然后销毁该对象.我希望线程中的代码无论如何都要继续,即使对象仍然被实例化.
有一个这些对象的列表,它们是在一个线程中创建的.当自己在这个列表中的对象发生某些事情时(特别是在这种情况下是对象的破坏),它自己具有事件的线程.我实际上是将这些事件提供给一个事件队列(一个TList,它包含指向什么事件和什么对象的记录指针).所以在线程内部,我向此事件列表添加一条记录.
然后线程的执行出现并循环遍历此列表中的事件并相应地触发它们(下面的示例).因此,当事件被添加到列表中时,它将对象指针保存为此事件的记录指针的一部分.在实际触发事件之前可能会有很长的延迟.此时,对象仍需要实例化,以便可以从线程外部读取.只有这样,物体才会被摧毁.
用于此事件队列的机制没有任何反馈给线程的空间.它已经是一个已开发的系统,并且该事件队列的任何添加都告诉线程该事件已被触发是不可能的,因为它需要整个重写.否则,我会简单地告诉线程在我的事件被调用后销毁这个对象.
这是一些片段,系统实际上非常大,因此很难显示所有功能.一个线程的事件通过另外4个父对象引发一系列事件,将这个对象传递给每个对象.目标是防止线程之外的任何代码处理这种实际的破坏.在销毁之前,线程应该对等待此事件负全部责任...
type
TJDNetSvrNode = class;
TJDNetSvrThread = class;
TNodeEvent = (neUnload); //And many more
PNodeEventRec = ^TNodeEventRec;
TNodeEventRec = record
Event: TNodeEvent;
Node: TJDNetSvrNode;
end;
TJDNetSvrNodeEvent = procedure(Sender: TObject; Node: TJDNetSvrNode) of object;
TJDNetSvrNode = class(TObject)
//Large object with no relevant members
end;
TJDNetSvrThread = class(TThread)
private
FNodeEvents: TList;
FNodeEvent: PNodeEventRec;
FOnNodeUnload: TJDNetSvrNodeEvent;
procedure SYNC_OnUnload;
public
property OnNodeUnload: TJDNetSvrNodeEvent read FOnNodeUnload write FOnNodeUnload;
end; //Much more in this class …
Run Code Online (Sandbox Code Playgroud) 我是Android开发的新手.我试图开发一个应用程序来绘制一条线来跟随手指..我TouchPaint
在开发指南上的示例的帮助..我在事件getPaintModeForTool(event.getToolType(j), mode)
上得到错误.. 也在event.getHistoricalAxisValue(MotionEvent.AXIS_DISTANCE, j, i)
这是代码
final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE
/*|| action == MotionEvent.ACTION_HOVER_MOVE*/) {
final int N = event.getHistorySize();
final int P = event.getPointerCount();
for (int i = 0; i < N; i++) {
for (int j = 0; j < P; j++) {
paint(getPaintModeForTool(event.getToolType(j), mode),
event.getHistoricalX(j, i),
event.getHistoricalY(j, i),
event.getHistoricalPressure(j, i),
event.getHistoricalTouchMajor(j, i),
event.getHistoricalTouchMinor(j, i),
event.getHistoricalOrientation(j, i),
event.getHistoricalAxisValue(MotionEvent.AXIS_DISTANCE, j, i),
event.getHistoricalAxisValue(MotionEvent.AXIS_TILT, j, i));
} …
Run Code Online (Sandbox Code Playgroud) 美好的一天.我想找出发件人的许多按钮.
在C#中有类似的东西:
Button b = new Button();
b.Text = "Click 1";
b.Location = new Point(20, 20);
b.Size = new Size(100, 20);
// Our Handler
b.Click += new EventHandler(myClick);
// Implementation of next button...
// Add to form
this.Controls.Add(b);
this.Controls.Add(nextButton);
...
// And our event
private void myClick(object sender, System.EventArgs e)
{
var mysender = ((Button)sender).Name;
doAnything(mysender);
}
Run Code Online (Sandbox Code Playgroud)
我在VBA中没有任何想法(不是VB!).VBA表示Visual Basic for Applications.在VBA中有可能吗?我正在使用Excel.我已经尝试过Application.Caller,但它不起作用.任何样品 - 建议?
我的问题在这里:为什么这段代码不起作用????? ...邮件没有出现
我正试图在事件点击时向元素x添加事件监听器
function test()
{
alert("test");
}
var EventsCrossBrowsers =
{
addEvents:(function(element,event,func)
{
if(element.addEventListener)
{
return elemenet.addEventListener(event,func,false);
}
else if(elemenet.attachEvent)
{
return elemenet.attachEvent("on"+event,func);
}
}());
}
var x =document.getElementById("test");
EventsCrossBrowsers.addEvents(x,"click",test);
Run Code Online (Sandbox Code Playgroud)
非常感谢jfriend00 ....我认为最微笑的方式: -
function test()
{
alert("test");
}
function addEventsCrossBrowsers(elemenet,event,func)
{
if(elemenet.addEventListener)
{
elemenet.addEventListener(event,func,false);
}
else if(elemenet.attachEvent)
{
elemenet.attachEvent("on"+event,func);
}
}
var x =document.getElementById("test");
addEventsCrossBrowsers(x,"click",test);
Run Code Online (Sandbox Code Playgroud)
你的第二种方式几乎是一样的,除了我不理解回报...再次感谢你...
我试图从一个独立的子程序引用KeyDown事件,并让它循环回原始的独立子程序.
*步骤1和2在我的代码中工作得很好.第3步是问题所在.我的程序没有循环回到独立的子程序.
Public Class frmMain
Dim RandomNumber As Integer
Dim RandomNumbers(1000) As Integer
Dim intAction As Integer
Dim strAction1 As String = "A"
Dim strAction2 As String = "B"
Dim strAction3 As String = "C"
Dim strAction4 As String = "D"
Dim i As Integer
Private Sub frmMain_Load(sender As Object, e As System.EventArgs) Handles Me.Load
FormLoad(sender, e)
End Sub
Private Sub FormLoad(sender, e)
'Creates random numbers here
DisplayAction(sender, e)
End Sub
Public Sub DisplayAction(sender, …
Run Code Online (Sandbox Code Playgroud) 我目前正在编写类似于brick breaker的游戏,需要知道如何使我的程序等待调用特定函数.
我需要暂停程序,直到按钮之间做出决定.例如,游戏启动,并且用户可以选择他想要在他的游戏中使用哪种颜色.因此,游戏暂停直到他的选择已经完成并且他很高兴然后该程序需要恢复到不同的阶段.
这是一个简单的代码,它创建一个按钮并分配一个onclick处理程序:
auto btn = new QPushButton("CLICK ME");
connect(btn, SIGNAL(clicked()), this, SLOT(btn_Click()));
private slots:
void btn_Click() {
alert("clicked!");
}
Run Code Online (Sandbox Code Playgroud)
如果在主窗口类中调用它,它应该工作.但是,当我尝试在子窗口中执行此操作时,单击该按钮不会执行任何操作.子窗口如下所示:
auto settingsWindow = new SettingsWindow();
settingsWindow->show();
Run Code Online (Sandbox Code Playgroud)
我猜它以某种方式与接收器对象连接,接收器对象现在是一个不同的窗口.但是我怎样才能让它发挥作用呢?
我有一个Windows窗体应用程序,我希望能够在用户执行特定操作时显示"便利贴"类型的东西.
例如:用户执行自动隐藏控件的操作.
我的应用程序应该:o弹出一个便条,说明发生了什么.o当用户单击表单上的任何位置时,再次隐藏发布便笺.
我已经将它作为一个带有标签的简单面板实现了便条,它在特定事件发生时显示和隐藏.
但是,我似乎无法捕获父UserControl的OnClick事件.父控件是一个嵌套控件,包含一个拆分容器,其中一个包含面板和一个制表符控件,每个控件包含一个包含各种内容的用户控件.
除了处理每个子控件的click事件之外,任何人都可以想到我可以在父控件上捕获的事件,当用户单击父控件中的任何位置时,我可以使用该事件来隐藏它的注释吗?
谢谢,Rik
我已经尝试了所有我在SO上找到的答案,所以要么我有不同的问题,要么热量进入我的大脑.
无论如何,我在故事板上有一个UIButton,它链接到一个名为_cameraButtonPress的IBAction(UIButton被称为_cameraButton).当按下按钮时我想禁用按钮一段时间,所以我立即调用[sender setEnabled:NO]; 这很好用.但是,在保存图像的不同功能中,成功保存后我使用[_cameraButton.setEnabled:YES]; 这不起作用.
如果我在IBAction调用的函数中用_cameraButton替换sender,这也不起作用.我把UIButton链接到IBOutlet.
我可以发布代码,但现在这是一个非常大的项目,以下是相关内容:
在标题中......
IBOutlet UIButton *_cameraButton;
Run Code Online (Sandbox Code Playgroud)
IBAction ......
- (IBAction) _cameraButtonPress:(id)sender {
[sender setEnabled:NO]; //stops button responding to touch events
Run Code Online (Sandbox Code Playgroud)
进一步降低功能:
} else {
NSLog(@"colour image saved successfully");
[_cameraButton setEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢.
我怎么能在没有实际发生的情况下执行事件?
例如,如何button1_Click()
在不单击按钮的情况下在代码中执行事件?
问题是我有一个WebClient
doewnloads文件列表.每次完成下载文件时,它都会执行一个DownloadFileCompleted
事件,然后下载下一个文件.
但是,某些文件未下载(全部在计划中),因此不会执行该事件.我怎么能执行它?谢谢