Tag: multithreading

如何从另一个线程中暂停和恢复Java线程

我正在用Java Swing编写一个应用程序。 我需要的是一个程序,我可以使用graphics界面中的button来停止“精化”线程。 这里有一个简单的项目,侧重于我所需要的 import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JTextArea; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author Nikola */ public class Main extends javax.swing.JFrame { private MyThread THREAD; public Main() { initComponents(); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> […]

如何保护可能在multithreading或asynchronous环境中使用的资源?

我正在研究一个被各种消费者使用的C#API。 这个API提供对共享资源的访问(在我的情况下是用来进行串行通信的硬件),通常会有几个不同的参与者试图同时使用它。 我的问题是,我的一些消费者会想要在multithreading环境中使用它 – 每个angular色独立工作,并尝试使用资源。 一个简单的锁在这里工作正常。 但是,我的一些消费者更喜欢使用asynchronous等待和时间片资源。 (据我所知)这需要一个asynchronouslocking产生时间片回到其他任务; 在锁上阻塞会阻止整个线程。 而且我认为有串行锁是最好的,最坏的情况是潜在的竞争条件或死锁。 那么我怎样才能保护共享代码库中的共享资源,以实现潜在的并发使用?

Java:如何停止线程?

有什么办法阻止从线程的另一个线程? 就像,如果我运行一个线程来运行该线程,并导致该线程停止? 会阻止另一个线程吗? 有没有一个方法来停止从没有循环内线程? 例如,如果你正在下载理想情况下,你会想要使用循环,如果我使用循环,我不会暂停它,直到到达循环的结尾。

不断更新Java FX工作线程中的UI

我在我的FXML应用程序中有Label label 。 我希望这个标签每秒更换一次。 目前我使用这个: Task task = new Task<Void>() { @Override public Void call() throws Exception { int i = 0; while (true) { lbl_tokenValid.setText(""+i); i++; Thread.sleep(1000); } } }; Thread th = new Thread(task); th.setDaemon(true); th.start(); 然而,没有发生。 我没有得到任何错误或例外。 我不需要在我的主GUI线程中更改标签的值,所以我没有在updateMessage或updateProgress方法中看到这一点。 哪里不对?

C ++线程,std :: system_error – 操作不允许?

所以我写了一个程序来testing64位kubuntu linux版本13.04上的线程。 其实我是从编写testing程序的其他人那里抢走了代码。 #include <cstdlib> #include <iostream> #include <thread> void task1(const std::string msg) { std::cout << "task1 says: " << msg << std::endl; } int main(int argc, char **argv) { std::thread t1(task1, "Hello"); t1.join(); return EXIT_SUCCESS; } 我编译使用: g++ -pthread -std=c++11 -c main.cpp g++ main.o -o main.out 然后跑: ./main.out 另外,当我'ls -l'时,main.out像所有可执行文件一样以绿色文本显示,但在名称末尾有一个星号。 为什么是这样? 回到手头的问题:当我运行main.out时,出现一个错误,它说: terminate called […]

如何在C#中立即杀死一个线程?

我正在使用thread.Abort方法杀死线程,但它不工作。 有没有其他的方式来终止线程? private void button1_Click(object sender, EventArgs e) { if (Receiver.IsAlive == true) { MessageBox.Show("Alive"); Receiver.Abort(); } else { MessageBox.Show("Dead"); Receiver.Start(); } } 我正在使用这个,但每次我得到Alive地位, Receiver是我的全球线程。

如何从另一个线程调用UI方法

玩定时器。 上下文:有两个标签的winforms。 我想看看如何System.Timers.Timer工作,所以我没有使用Forms计时器。 我明白,表单和myTimer现在将运行在不同的线程。 是否有一种简单的方法来表示以下forms的lblValue的stream逝时间? 我在MSDN上看过这里,但有一个更简单的方法! 这里是winforms代码: using System.Timers; namespace Ariport_Parking { public partial class AirportParking : Form { //instance variables of the form System.Timers.Timer myTimer; int ElapsedCounter = 0; int MaxTime = 5000; int elapsedTime = 0; static int tickLength = 100; public AirportParking() { InitializeComponent(); keepingTime(); lblValue.Text = "hello"; } //method for keeping […]

线程Control.Invoke

我有一个function public void ShowAllFly() { cbFly.Items.Clear(); cbFly.Items.Add("Uçuş Seçiniz…"); dsFlyTableAdapters.tblFlyTableAdapter _t=new KTHY.dsFlyTableAdapters.tblFlyTableAdapter(); dsFly _mds = new dsFly(); _mds.EnforceConstraints = false; dsFly.tblFlyDataTable _m = _mds.tblFly; _t.Fill(_m); foreach (DataRow _row in _m.Rows) { cbFly.Items.Add(_row["FlyID"].ToString()+"-"+_row["FlyName"].ToString() + "-" + _row["FlyDirection"].ToString() + "-" + _row["FlyDateTime"].ToString()); } _Thread.Abort(); timer1.Enabled = false; WaitPanel.Visible = false; } 在Form_Load函数中像这样; { _Thread = new System.Threading.Thread(new System.Threading.ThreadStart(ShowAllFly)); […]

在单独的线程中更新ObservableCollection

在WPF应用程序中,通过LINQ to SQL查询填充和更新ObservableCollection。 然后使用这个ObservableCollection中的值更新UI对象。 LINQ to SQL查询更新这个ObservableCollection的操作在单独的线程中执行是否可行? 如果是的话,在这种情况下,它会是这个ObservableCollection的同一个实例吗? (我的意思是,如果它不是从LINQ datacontext中获取值,也不是用于更新UI的值,那么我将无法更新UI)

如何在Qt中高效地显示OpenCVvideo?

我在OpenCV的帮助下从networking摄像机捕获多个stream。 当我尝试从OpenCV窗口( cv::namedWindow(…) )显示这些stream,它的工作原理没有任何问题(迄今为止我已经尝试了4个stream)。 当我尝试在Qt小部件中显示这些stream时出现问题。 由于捕获是在另一个线程完成的,我必须使用信号槽机制来更新QWidget(在主线程中)。 基本上,我从捕获线程发出新捕获的帧,GUI线程中的一个插槽捕获它。 当我打开4个stream,我不能像以前一样顺利地显示video。 这是发射器: void capture::start_process() { m_enable = true; cv::Mat frame; while(m_enable) { if (!m_video_handle->read(frame)) { break; } cv::cvtColor(frame, frame,CV_BGR2RGB); qDebug() << "FRAME : " << frame.data; emit image_ready(QImage(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888)); cv::waitKey(30); } } 这是我的插槽: void widget::set_image(QImage image) { img = image; qDebug() << "PARAMETER IMAGE: " […]