Tag: multithreading

MVC进度条线程

我为我的devise使用MVC模式,当用户按下searchbutton时,我调用了模型中的search,但是我也想用从该模型返回的信息更新进度条。 我曾尝试使用一个摆动,但进度栏不更新。 我怀疑我的线程有问题。 我在控制器中定义的button是: class SearchBtnListener implements ActionListener { public void actionPerformed(ActionEvent e) { _view.displayProgress(); } } 这将调用模型中的search,并在视图中进行以下调用: public void displayProgress() { TwoWorker task = new TwoWorker(); task.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent e) { if ("progress".equals(e.getPropertyName())) { _progressBar.setValue((Integer) e.getNewValue()); } } }); task.execute(); } private class TwoWorker extends SwingWorker<Void, Void> { @Override protected […]

GCD,线程,程序stream和UI更新

我很难弄清楚如何把这一切放在一起。 我在Mac上有一个解谜应用程序。 你input谜题,按下一个button,当它试图find解决scheme的数量,分钟移动等,我想保持UI更新。 然后一旦完成计算,重新启用button并更改标题。 下面是一些示例代码从buttonselect器和解决函数:(请记住我从Xcode复制/粘贴,以便可能有一些失踪或其他一些错别字..但它应该让你知道我是什么,米试图做。 基本上,用户按下一个button,那个button是ENABLED = NO,函数调用来计算拼图。 在计算时,请使用移动/解决scheme数据更新UI标签。 然后一旦完成计算拼图,Button是ENABLED = YES; 按下button时调用: – (void) solvePuzzle:(id)sender{ solveButton.enabled = NO; solveButton.title = @"Working . . . ."; // I've tried using this as a Background thread, but I can't get the code to waitTilDone before continuing and changing the button state. [self performSelectorInBackground:@selector(createTreeFromNode:) withObject:rootNode]; // I've […]

构build不在事件派发线程上的Swing / AWT小部件是否安全?

我已经将物质的外观和感觉整合到了我的应用程序中,并遇到了有关它的内部EDT(Event Dispatch Thread)检查例程的几个问题。 物质绝对拒绝在EDT之外构buildUI类。 我已经做了很多Swing / AWT,并且我知道关于EDT的大部分规则。 我使用SwingWorker,SwingUtilties.invokeLater来修改组件。 我总是认为这些组件可以在EDT之外构build ,但是必须在EDT上实现和操纵 。 换句话说,您可以在后台构造和设置默认值,但是对pack / setVisible的调用必须是EDT以及任何后续调用组件的调用。 我问的原因是,我有一个特别“结实”的窗口来构build,涉及到许多小部件,状态和资源(很多图标)。 之前,我在SwingWorker的背景方法上构build了窗口,并使窗口在done方法中可见。 从来没有一个单一的问题。 切换到物质后,内部的EDT检查咬我。 我已经能够重构代码来解决这个问题。 我可以在EDT上构build这个不好的解决scheme,因为整个应用程序都会阻塞。 我还可以重构更多的东西,并尽我所能加载EDT以外的所有额外资源。 包装它… 构build Swing / AWT小部件不是在事件派发线程安全吗?

-pthread和-lpthread在编译时的区别

编译multithreading程序时使用的gcc -pthread和gcc -lpthread有什么区别?

Tkinter:如何使用线程来防止主要事件循环“冻结”

我有一个“开始”button和一个进度条小GUItesting。 期望的行为是: 点击开始 进度条振荡5秒钟 进度条停止 观察到的行为是“开始”button冻结5秒,然后显示一个进度条(不振荡)。 这是我的代码到目前为止: class GUI: def __init__(self, master): self.master = master self.test_button = Button(self.master, command=self.tb_click) self.test_button.configure( text="Start", background="Grey", padx=50 ) self.test_button.pack(side=TOP) def progress(self): self.prog_bar = ttk.Progressbar( self.master, orient="horizontal", length=200, mode="indeterminate" ) self.prog_bar.pack(side=TOP) def tb_click(self): self.progress() self.prog_bar.start() # Simulate long running process t = threading.Thread(target=time.sleep, args=(5,)) t.start() t.join() self.prog_bar.stop() root = Tk() […]

Java双重检查locking

我碰巧遇到了一篇最近讨论Java中的双重检查locking模式的文章,以及它的陷阱,现在我想知道如果我已经使用多年的模式的变体现在受到任何问题。 我已经看了很多关于这个主题的post和文章,并且了解了获得对部分构build的对象的引用的潜在问题,据我所知,我认为我的实现不受这些问题的影响。 以下模式有问题吗? 而且,如果不是,人们为什么不使用它? 在这个问题上我看过的任何讨论都没有看到过。 public class Test { private static Test instance; private static boolean initialized = false; public static Test getInstance() { if (!initialized) { synchronized (Test.class) { if (!initialized) { instance = new Test(); initialized = true; } } } return instance; } }

访问UI(主)在WPF中安全地线程

我有一个应用程序更新我的数据网格,每当我正在看日志文件更新(附加新文本)在以下方式: private void DGAddRow(string name, FunctionType ft) { ASCIIEncoding ascii = new ASCIIEncoding(); CommDGDataSource ds = new CommDGDataSource(); int position = 0; string[] data_split = ft.Data.Split(' '); foreach (AttributeType at in ft.Types) { if (at.IsAddress) { ds.Source = HexString2Ascii(data_split[position]); ds.Destination = HexString2Ascii(data_split[position+1]); break; } else { position += at.Size; } } ds.Protocol = name; ds.Number […]

'使用'语句与'最后尝试'

我有一堆属性,我将使用读/写锁。 我可以通过try finally或try finally子句来实现它们。 在try finally的try finally我会在try之前获得locking,并在finally释放。 在using子句中,我将创build一个在其构造函数中获取锁的类,并在其Dispose方法中释放它。 我在很多地方使用读/写锁,所以我一直在寻找比try finally更简洁的方法。 我有兴趣听到一些关于为什么不推荐一种方式或为什么可能比另一种更好的想法。 方法1( try finally ): static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock(); private DateTime dtMyDateTime_m public DateTime MyDateTime { get { rwlMyLock_m .AcquireReaderLock(0); try { return dtMyDateTime_m } finally { rwlMyLock_m .ReleaseReaderLock(); } } set { rwlMyLock_m .AcquireWriterLock(0); try { dtMyDateTime_m = value; } finally { […]

有没有办法无限期地暂停一个线程?

我一直在空闲时间在网上爬行.NET应用程序,我想包括这个应用程序的function之一是暂停button来暂停特定的线程。 我对于multithreading相对来说比较新,而且我还没有find一种无限期地暂停线程的方法。 我不记得确切的类/方法,但我知道有一种方法可以做到这一点,但它已被标记为过时的.NET框架。 有没有什么好的通用目的的方式来无限期地暂停C#.NET中的工作线程。 最近我没有太多的时间来处理这个应用程序,最后一次碰到它是在.NET 2.0框架。 我接受.NET 3.5框架中的任何新function(如果有的话),但是我想知道在2.0框架下工作的解决scheme,因为这是我在工作中使用的方法,以防万一。

在同一个线程上调用两次启动方法是否合法?

下面的代码导致java.lang.IllegalThreadStateException: Thread already started在程序中第二次调用start()方法时java.lang.IllegalThreadStateException: Thread already started 。 updateUI.join(); if (!updateUI.isAlive()) updateUI.start(); 第二次调用updateUI.start()时会发生这种情况。 我已经通过了多次,线程被调用,完成之前运行到完成updateUI.start() 。 调用updateUI.run()可以避免这个错误,但会导致线程在UI线程(调用线程,就像在SO上的其他post中提到的那样)中运行,这不是我想要的。 线程只能启动一次吗? 如果是这样,如果我想再次运行线程,该怎么办? 这个特定的线程是在后台做一些计算,如果我不在线程中做它比在UI线程中完成,并且用户有不合理的漫长的等待。