Tag: multithreading

调用线程不能访问这个对象,因为不同的线程拥有它

我的代码如下 public CountryStandards() { InitializeComponent(); try { FillPageControls(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error); } } /// <summary> /// Fills the page controls. /// </summary> private void FillPageControls() { popUpProgressBar.IsOpen = true; lblProgress.Content = "Loading. Please wait…"; progress.IsIndeterminate = true; worker = new BackgroundWorker(); worker.DoWork += new System.ComponentModel.DoWorkEventHandler(worker_DoWork); worker.ProgressChanged += new […]

如何在Java中使用wait和notify?

我有2个matrix,我需要将它们相乘,然后打印每个单元格的结果。 只要一个单元准备就绪,我需要打印它,但是例如,即使[2] [0]的结果先准备就绪,我需要在单元[2] [0]之前打印[0] [0]单元。 所以我需要按顺序打印。 所以我的想法是使打印机线程等待,直到multiplyThread通知它正确的单元格准备好打印,然后printerThread将打印单元格,并返回到等待等等。 所以我有这个线程,做乘法: public void run() { int countNumOfActions = 0; // How many multiplications have we done int maxActions = randomize(); // Maximum number of actions allowed for (int i = 0; i < size; i++) { result[rowNum][colNum] = result[rowNum][colNum] + row[i] * col[i]; countNumOfActions++; // Reached the number […]

Invoke()和BeginInvoke()之间有什么区别

只是想知道BeginInvoke()和Invoke()之间的区别是什么? 主要是每一个将被用于什么。 编辑:创build一个线程对象和调用该调用,只是调用BeginInvoke()上的BeginInvoke()之间有什么区别? 还是他们是一样的东西?

内部类可以访问但不更新值 – AsyncTask

我正在尝试使用Android的AsyncTask解压缩文件夹。 这个类(称为Decompress)是Unzip一个内部类,Unzip本身是一个非活动类。 伪代码是: public class Unzip { private String index; private String unzipDest; //destination file for storing folder. private Activity activity; private boolean result; //result of decompress. public void unzip(String loc) { Decompress workThread = new Decompress(loc, activity); workThread.execute(); if(unzip operation was successful) { display(index); } //Class Decompress: class Decompress extends AsyncTask<Void, Integer, Boolean> { […]

从另一个线程使用Unity API或调用主线程中的函数

我的问题是我尝试使用Unity套接字来实现一些东西。 每当我收到一条新消息时,我都需要将它更新到updattext(这是一个Unity文本)。 但是,当我执行以下代码时,无效更新不会每次都调用。 我不包括updatetext.GetComponent<Text>().text = "From server: "+tempMesg;的原因updatetext.GetComponent<Text>().text = "From server: "+tempMesg; 在无效getInformation是这个函数是在线程中,当我包含在getInformation()它会带来一个错误: getcomponentfastpath can only be called from the main thread 我觉得问题是我不知道如何在C#中一起运行主线程和子线程? 或者也许还有其他问题…希望有人可以帮助..有我的代码: using UnityEngine; using System.Collections; using System; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine.UI; public class Client : MonoBehaviour { System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); private Thread oThread; // for UI […]

避免在Java中同步(this)?

每当一个关于Java同步的问题popup时,有些人非常希望指出应该避免synchronized(this) 。 相反,他们声称,locking一个私人参考是首选。 一些给定的原因是: 一些邪恶的代码可能会偷你的锁 (非常stream行这一个,也有一个“意外”的变种) 同一类中的所有同步方法使用完全相同的锁,这会降低吞吐量 你(不必要地)暴露太多的信息 包括我在内的其他人认为synchronized(this)是一个习惯用法(在Java库中也是如此),是安全的,并且很好理解。 它不应该被避免,因为你有一个错误,你不知道你的multithreading程序正在发生什么。 换句话说:如果适用,那么就使用它。 我有兴趣看到一些真实世界的例子(没有foobar的东西),避免lockingthis是最好的时候synchronized(this)也可以做这项工作。 因此: 你应该总是避免synchronized(this)并用一个私人引用上的锁代替它? 一些更多的信息(更新为答案): 我们正在谈论实例同步 同时考虑隐式( synchronized方法)和显式forms的synchronized(this) 如果您引用Bloch或其他权威人士的话,请不要忽略您不喜欢的部分(例如Effective Java,线程安全上的项目: 通常它是实例本身的锁,但也有例外)。 如果你的locking需要粒度,而不是synchronized(this)提供,那么synchronized(this)不适用,所以这不是问题

超时使用模块“subprocess”

下面是运行任意命令返回stdout数据的Python代码,或者引发非零退出代码的exception: proc = subprocess.Popen( cmd, stderr=subprocess.STDOUT, # Merge stdout and stderr stdout=subprocess.PIPE, shell=True) communicate是用来等待进程退出: stdoutdata, stderrdata = proc.communicate() subprocess进程模块不支持超时 – 杀死运行超过X秒的进程的能力 – 因此, communicate可能需要永远运行。 在Windows和Linux上运行的Python程序中实现超时的最简单方法是什么?

自动执行InvokeRequired代码模式

我已经痛苦地意识到需要多长时间在事件驱动的GUI代码中编写以下代码模式 private void DoGUISwitch() { // cruisin for a bruisin' through exception city object1.Visible = true; object2.Visible = false; } 变为: private void DoGUISwitch() { if (object1.InvokeRequired) { object1.Invoke(new MethodInvoker(() => { DoGUISwitch(); })); } else { object1.Visible = true; object2.Visible = false; } } 这是C#中的一个尴尬模式,既要记住又要键入。 有没有人想出了一些快捷方式或构造,这在一定程度上自动化? 如果有一种方法可以将函数附加到对象上,而不需要经过所有这些额外的工作,比如object1.InvokeIfNecessary.visible = truetypes的快捷方式,那将会很酷。 以前的答案已经讨论过每次只调用Invoke()的不切实际的情况,即使如此,Invoke()语法也是效率低下,处理起来还是尴尬的。 那么,有没有人找出任何捷径?

使用Thread.Abort()有什么问题

所以我知道你不应该使用 Thread.Abort() 但我从来没有得到一个很好的解释。 是否有性能损失或一些隐藏的陷阱? 我知道你不能忽略/吞下ThreadAbortException(这是有道理的)

在.NET中创build一个阻塞队列<T>?

我有一个场景,我有多个线程添加到一个队列和多个线程从同一个队列读取。 如果队列达到特定的大小, 所有填充队列的线程将被阻塞,直到从队列中删除一个项目。 下面的解决scheme是我现在使用的,我的问题是:如何改进? 有没有一个对象已经在我应该使用的BCL中启用这种行为? internal class BlockingCollection<T> : CollectionBase, IEnumerable { //todo: might be worth changing this into a proper QUEUE private AutoResetEvent _FullEvent = new AutoResetEvent(false); internal T this[int i] { get { return (T) List[i]; } } private int _MaxSize; internal int MaxSize { get { return _MaxSize; } set { _MaxSize […]