哪个线程是对象的事件处理处理?

时间:2011-12-07 13:45:51

标签: c++ multithreading events

我创建了一个充当线程的类。

在该课程中,我创建了一个对象。这个对象有一个事件,它对我的​​线程类中创建的方法执行回调。

那么,我的主应用程序/ GUI线程创建了这个线程&开始吧。

此时,我的主GUI线程处于闲置状态(等待键盘事件)&我的线程的execute方法处于无限循环中(等待终止)。

然后,创建的对象检测到某个事件,触发事件,触发对线程类方法的回调。

那么问题是,这个方法在哪个线程/进程中执行? 我的主要应用程序线程(& GUI处理程序)? 或者我开始的线程,它创建了触发事件/回调的对象?

我假设主应用程序线程被中断了。这是对的吗?

2 个答案:

答案 0 :(得分:0)

在等待事件的线程上执行回调并调用回调。在这种情况下,它是你的工作线程。

您的主线程(GUI线程)没有被中断,也没有计算OS执行潜在上下文切换的中断。

答案 1 :(得分:0)

这里没有魔法,事件处理程序只是在与触发事件的代码相同的线程上运行。当您希望事件处理程序更新UI时,这总是很麻烦,除了创建UI对象之外的任何线程都不合法。

您必须编组从工作线程到UI线程的调用。您使用的任何类库都支持实现UI。你没有说,它闻起来像Winforms,在这种情况下你使用Control :: BeginInvoke()。如果是原始Windows,则使用PostMessage()。等等。