Tag: multithreading

PyQt4在线程中等待来自GUI的用户input

我有一个线程类“MyThread”和我的主要应用程序,简称为“桂”。 我想从线程类创build一些对象,但对于这个例子,我只创build了一个对象。 线程类做了一些工作,然后向Gui类发出一个信号,表示需要用户input(现在这个指示只是简单的改变一个button的文本)。 然后,线程应该等待用户input(在这种情况下点击一个button),然后继续做它正在做的事情… from PyQt4 import QtGui, QtCore class MyTrhead(QtCore.QThread): trigger = QtCore.pyqtSignal(str) def run(self): print(self.currentThreadId()) for i in range(0,10): print("working ") self.trigger.emit("3 + {} = ?".format(i)) #### WAIT FOR RESULT time.sleep(1) class Gui(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(Gui, self).__init__(parent) self.setupUi(self) self.pushButton.clicked.connect(self.btn) self.t1 = MyTrhead() self.t1.trigger.connect(self.dispaly_message) self.t1.start() print("thread: {}".format(self.t1.isRunning())) @QtCore.pyqtSlot(str) def dispaly_message(self, mystr): self.pushButton.setText(mystr) […]

暂停/停止并继续启动/恢复Java TimerTask?

我有一个关于Java TimerTask的简单问题。 如何根据一定的条件暂停/恢复两个TimerTask任务? 例如,我有两个在彼此之间运行的定时器。 当第一个定时器的任务内部满足一定的条件时,第一个定时器停止并启动第二个定时器,在第二个定时器的任务内满足一定的条件时也会发生同样的情况。 下面的课程显示了我的意思: public class TimerTest { Timer timer1; Timer timer2; volatile boolean a = false; public TimerTest() { timer1 = new Timer(); timer2 = new Timer(); } public void runStart() { timer1.scheduleAtFixedRate(new Task1(), 0, 1000); } class Task1 extends TimerTask { public void run() { System.out.println("Checking a"); a = SomeClass.getSomeStaticValue(); if […]

Thread.Sleep(1)在C#中的影响是什么?

在Windows窗体应用程序中调用Thread.Sleep(1)的影响是什么,如下面的代码所示: public Constructor() { Thread thread = new Thread(Task); thread.IsBackground = true; thread.Start(); } private void Task() { while (true) { // do something Thread.Sleep(1); } } 这个线程会占用所有可用的CPU吗? 我可以使用哪些分析技术来衡量此线程的CPU使用率(除了任务pipe理器)?

运行和启动线程之间的差异

我不明白启动和运行一个线程之间的差异,我testing了这两个方法,他们输出相同的结果,首先我使用run()的组合,并开始在同一个线程,他们做了如下相同的function: public class TestRunAndStart implements Runnable { public void run() { System.out.println("running"); } public static void main(String[] args) { Thread t = new Thread(new TestRunAndStart()); t.run(); t.run(); t.start(); } } 输出是: running running running 然后我看到run()方法的javadoc说: If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, […]

如何获得windows上每个线程的CPU使用率(win32)

寻找Win32 API函数,C ++或Delphi示例代码,告诉我一个线程的CPU使用率(百分比和/或总CPU时间)(而不是一个进程的总数)。 我有线程ID。 我知道,Sysinternals进程资源pipe理器可以显示这些信息,但我需要在我的程序中的这些信息。

multithreadingquicksort或mergesort

我怎样才能为Java实现一个并发的quicksort或mergesortalgorithm? 我们在16位(虚拟)核心Mac上遇到问题,其中只有一个核心(!)正在使用默认的Javasortingalgorithm,而且很好地看到非常好的机器被完全没有使用。 所以我们写了我们自己的(我写的),而且确实获得了很好的加速(我写了一个multithreading的快速sorting,由于它的分区性质,它并行化很好,但我也可以写一个mergesort)多达4个线程,它是专有代码,我宁愿使用来自信誉良好的源代码,而不是使用我重新发明的轮子。 我在网上find的唯一一个例子是如何不用 Java编写multithreading的快速sorting,它是繁忙循环(这真的很糟糕)使用: while (helpRequested) { } http://broadcast.oreilly.com/2009/06/may-column-multithreaded-algor.html 所以除了失去一个线程没有理由,它确保通过在while循环(这是mindboggling)忙循环杀死perfs。 因此,我的问题是:你知道任何正确的multithreading的快速sorting或Java中的合并实现将从一个有信誉的来源? 我把重点放在这样一个事实上,即我知道复杂性保持O(n log n),但是我仍然非常乐意看到所有这些内核开始工作,而不是闲置。 请注意,对于其他任务,在同样的16个虚拟内核Mac上,我通过并行化代码(我并不是指并发专家)加速到x7。 所以,即使艰难的复杂性保持O(n日志n),我真的很感激x7或x8甚至x16的加速。

使用Java中的两个线程打印偶数和奇数

我试了下面的代码。 我从其他一些post中拿出了这段代码,这个post根据作者是正确的。 但是当我跑步的时候,并没有给我确切的结果。 这主要是按顺序打印偶数和奇数值。 public class PrintEvenOddTester { public static void main(String … args){ Printer print = new Printer(false); Thread t1 = new Thread(new TaskEvenOdd(print)); Thread t2 = new Thread(new TaskEvenOdd(print)); t1.start(); t2.start(); } } class TaskEvenOdd implements Runnable { int number=1; Printer print; TaskEvenOdd(Printer print){ this.print = print; } @Override public void run() { […]

如何在Python 2.6中获得线程安全打印?

根据这些 文章,在Python中print不是线程安全的。 后面的文章提供了Python 3的变通方法。 如何在Python 2.6中获得线程安全print ?

在Java中同步String对象

我有一个web应用程序,我正在做一些负载/性能testing,特别是一个function,我们期望有几百个用户访问同一个页面,每10秒刷新一次。 我们发现使用这个函数可以改进的一个方面是caching来自Web服务一段时间的响应,因为数据没有变化。 在实现了这个基本的caching之后,在一些进一步的testing中,我发现我没有考虑到并发线程如何能够同时访问Cache。 我发现,在大约100ms的时间内,大约有50个线程试图从Cache中获取对象,发现它已经过期,敲击Web服务来获取数据,然后将对象放回到caching中。 原来的代码看起来像这样: private SomeData[] getSomeDataByEmail(WebServiceInterface service, String email) { final String key = "Data-" + email; SomeData[] data = (SomeData[]) StaticCache.get(key); if (data == null) { data = service.getSomeDataForEmail(email); StaticCache.set(key, data, CACHE_TIME); } else { logger.debug("getSomeDataForEmail: using cached object"); } return data; } 所以,为了确保只有一个线程在key对象过期时调用Web服务,我想我需要同步Cache的get / set操作,而且好像使用caching密钥将是一个很好的候选对象(通过这种方式,对电子邮件b@b.com的调用不会被对a@a.com的方法调用阻止)。 我更新了这个方法: private SomeData[] getSomeDataByEmail(WebServiceInterface service, String […]

如何在java中快速,干净的方式中止线程?

这是我的问题:我有一个对话框,用户可以改变一些参数(例如通过微调)。 每当这些参数中的一个发生变化时,我将启动一个线程根据新的参数值更新3D视图。 如果用户在第一个线程工作的时候改变了另外一个值(或者在微调箭头上多次点击了相同的值),我想中止第一个线程(和3D视图的更新)并启动一个新的线程用最新的参数值。 我怎么能这样做? PS:在我的线程的run()方法中没有循环,因此检查一个标记不是一个选项:更新3D视图的线程基本上只调用一个很长的方法来执行。 我不能添加任何标志在这个方法要求中止,因为我没有访问其代码。