我创建了一个充当线程的类。
在该课程中,我创建了一个对象。这个对象有一个事件,它对我的线程类中创建的方法执行回调。
那么,我的主应用程序/ GUI线程创建了这个线程&开始吧。
此时,我的主GUI线程处于闲置状态(等待键盘事件)&我的线程的execute方法处于无限循环中(等待终止)。
然后,创建的对象检测到某个事件,触发事件,触发对线程类方法的回调。
那么问题是,这个方法在哪个线程/进程中执行? 我的主要应用程序线程(& GUI处理程序)? 或者我开始的线程,它创建了触发事件/回调的对象?
我假设主应用程序线程被中断了。这是对的吗?
答案 0 :(得分:0)
在等待事件的线程上执行回调并调用回调。在这种情况下,它是你的工作线程。
您的主线程(GUI线程)没有被中断,也没有计算OS执行潜在上下文切换的中断。
答案 1 :(得分:0)
这里没有魔法,事件处理程序只是在与触发事件的代码相同的线程上运行。当您希望事件处理程序更新UI时,这总是很麻烦,除了创建UI对象之外的任何线程都不合法。
您必须编组从工作线程到UI线程的调用。您使用的任何类库都支持实现UI。你没有说,它闻起来像Winforms,在这种情况下你使用Control :: BeginInvoke()。如果是原始Windows,则使用PostMessage()。等等。