Tag: multithreading

从另一个线程写入文本框?

我无法弄清楚如何使一个C#Windows窗体应用程序写入一个线程的文本框。 例如在Program.cs中,我们有标准的main()来绘制表单: static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } 然后我们在Form1.cs中: public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public static void SampleFunction() { while(true) WindowsFormsApplication1.Form1.ActiveForm.Text += "hi. "; } 我是否完全错误? UPDATE 这里是从bendewey提供的工作代码示例: public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { […]

为什么大多数UI框架是单线程的?

例如,Java Swing和Android UI都使用单线程模型,其中单个UI线程负责更新所有UI。 是什么让框架devise师select了另一个线程模型呢? multithreadingUI模型可能会给你更多的性能,尽pipe代价是更复杂吗? 我意识到后者是一个大问题,因为线程相关的错误是讨厌的,但我想知道除了简单之外,是否还有单线程模型的其他优点?

Java:如何根据cpu核心扩展线程?

我不是一个好的java程序员,这只是我的爱好,但我渴望知道更多的东西。 我想用java中的多个线程来解决一个math问题。 我的math问题可以分解成单位,我想在几个线程中解决。 但是我不想有固定数量的线程在其上工作,而是相当于cpu核心数量的线程数量。 而我的问题是,我无法在互联网上find一个简单的教程。 我发现的都是固定线程的例子。 那么你能帮我一个好的方法吗?或者可以给我一个简单而又好的例子? 这将是非常好的:)

非最终字段的同步

每次我在非最终类字段上同步时,都会显示警告。 这里是代码: public class X { private Object o; public void setO(Object o) { this.o = o; } public void x() { synchronized (o) // synchronization on a non-final field { } } } 所以我改变了以下的编码方式.. public class X { private final Object o; public X() { o = new Object(); } public void x() { […]

AsyncTask线程永远不会死

我使用AsyncTask来获取数据,以响应用户按下button。 这样做效果良好,在获取数据时保持接口响应,但是当我检查了Eclipsedebugging器中发生了什么时,我发现每次创build一个新的AsyncTask (通常是因为它们只能被使用一次),一个新的线程正在创build,但从未终止。 结果是大量的AsyncTask线程就在那里。 我不确定这是否是一个实践中的问题,但我真的想摆脱这些额外的线程。 我怎样才能杀死这些线程?

Java中的Runnable和Callable接口的区别

在Java中devise并发线程时,使用Runnable和Callable接口有何区别,为什么要select一个呢?

BackgroundWorker RunWorkerCompleted事件

我的C#应用​​程序有几个后台工作人员。 有时候一个后台工作人员会开火。 当第一个后台工作器完成并且RunWorkerCompleted事件被触发时,该事件将在哪个线程触发,UI或调用RunWorkerAsync的第一个后台工作器? 我正在使用Microsoft Visual C#2008速成版。 任何想法或build议,你可能会感激。 谢谢。

如何在Android中暂停/恢复线程?

我有一个线程,进入一个活动。 我不希望线程连续运行,当用户单击主页button,或者,例如,用户收到一个电话。 所以我想暂停线程并在用户重新打开应用程序时继续。 我试过这个: protected void onPause() { synchronized (thread) { try { thread.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } super.onPause(); } protected void onResume() { thread.notify(); super.onResume(); } 它停止线程,但不恢复它,线程似乎冻结。 我也尝试了不赞成使用的方法Thread.suspend()和Thread.resume() ,但在这种情况下到Activity.onPause()线程不停止。 任何人都知道解决scheme

为什么全球口译员锁?

Python的Global Interpreter Lock的function究竟是什么? 编译为字节码的其他语言是否采用类似的机制?

在TPL Task对象上调用Dispose()是否可以接受?

我想触发一个任务在后台线程上运行。 我不想等任务完成。 在.net 3.5中我会这样做: ThreadPool.QueueUserWorkItem(d => { DoSomething(); }); 在.net 4中,TPL是build议的方式。 我见过的常见模式是: Task.Factory.StartNew(() => { DoSomething(); }); 但是, StartNew()方法返回一个实现IDisposable的Task对象。 这似乎被推荐这种模式的人忽视了。 Task.Dispose()方法的MSDN文档说: “在释放您最后一次引用任务之前,请始终调用Dispose。” 在完成任务之前,您不能调用任何处理任务,因此让主线程等待并调用处理器将首先打败后台线程。 也似乎没有任何完成/完成的事件可以用于清理。 Task类中的MSDN页面不对此进行评论,而“Pro C#2010 …”这本书推荐了相同的模式,并没有对任务处理进行评论。 我知道如果我只是离开它,终结者将抓住它,但是当我正在做这样的大火和忘记任务,并且终结者线程被淹没时,这是否会回来咬我? 所以我的问题是: 在这种情况下,不要在Task类上调用Dispose()是否可以接受? 如果是这样,为什么还有风险/后果? 有没有任何文件讨论这个? 或者有没有适当的方式处理我错过的Task对象? 还是有另一种方式与TPL做火和忘记任务?