Articles of multithreading

我怎样才能得到我的应用程序创build的所有线程列表

我想从我的应用程序中获得所有线程(除了主线程,GUI线程)的列表,以便对它们执行一些操作。 (设置优先级,杀死,暂停等)如何做到这一点?

在Qt中干净地closures一个QSerialPort

我试图closures使用QSerialPort库打开的串行端口,但它挂了一半以上的时间。 我正在开发一个multithreading的应用程序,一个线程负责UI和另一个串行通信。 我正在使用QThread包装类。 void CommThread::run() { serial = new QSerialPort(); serial->setPortName(portname); serial->setBaudRate(QSerialPort::Baud115200); if(!serial->open(QIODevice::ReadWrite)){ qDebug() << "Error opening Serial port within thread"; quit = true; return; }else{ /// \todo handle this exception more gracefully } /// Start our reading loop /// While CommThread::disconnect is not called, this loop will run while(!quit){ comm_mutex->lock(); /// If CommThread::disconnect() is […]

导致非primefaces的破裂

嗨我想要一个int和一个浮动的例子,导致用非primefaces值写入撕裂。 我似乎无法重现这一点。 这似乎是非常罕见的事情,或者我做错了什么。 这是我的testing代码,从不打印。 有什么问题吗? #include <windows.h> #include <tchar.h> #include <strsafe.h> #define MAX_THREADS 64 #define BUF_SIZE 255 DWORD WINAPI MyThreadFunction( LPVOID lpParam ); void ErrorHandler(LPTSTR lpszFunction); // Sample custom data structure for threads to use. // This is passed by void pointer so it can be any data type // that can be passed using […]

ReadDirectoryChangesW和GetOverlappedResult

我调用ReadDirectoryChangesWasynchronous监视后台线程中的目录更改。 这是如何打开目录( basePath ),并启动“阅读”线程: m_hDIR = CreateFileW( basePath, FILE_LIST_DIRECTORY | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL); if (m_hDIR == INVALID_HANDLE_VALUE) throw CrException(CrWin32ErrorString()); //Start reading changes in background thread m_Callback = std::move(a_Callback); m_Reading = true; m_ReadThread = std::thread(&CrDirectoryWatcher::StartRead, this); 这是StartRead() :(注意: m_Reading是atomic<bool> ) void StartRead() { DWORD dwBytes = 0; FILE_NOTIFY_INFORMATION fni{0}; […]

防止多个服务实例 – 最佳方法?

那么,您认为如何防止同时运行C#Windows服务的多个线程(该服务正在使用带有OnElapsed事件的timer )? 使用lock()或mutex ? 我似乎无法掌握mutex的概念,但使用lock()似乎对我的情况很好。 我应该花时间学习如何使用mutex吗?

Java中的跨进程同步

我如何同步在Windows上运行的两个Java进程? 我正在寻找像Win32命名互斥对象,它允许两个进程使用相同的locking对象。 谢谢

Windows API线程池简单的例子

[编辑:感谢MSalters答案和雷蒙德陈的InterlockedIncrement VS EnterCriticalSection / counter ++ / LeaveCriticalSection的答案 ,问题已解决,下面的代码工作正常。 这应该提供一个在Windows中使用线程池的有趣简单例子] 我无法find以下任务的简单示例。 我的程序,例如,需要增加一个巨大的std :: vector中的值,所以我想这样做并行。 它需要在程序的整个生命周期中进行很多次。 我知道如何在例程的每次调用时使用CreateThread,但是我无法摆脱使用ThreadPool的CreateThread。 这是我做的: class Thread { public: Thread(){} virtual void run() = 0 ; // I can inherit an "IncrementVectorThread" }; class IncrementVectorThread: public Thread { public: IncrementVectorThread(int threadID, int nbThreads, std::vector<int> &vec) : id(threadID), nb(nbThreads), myvec(vec) { }; virtual void […]

debuggingmultithreading应用程序后系统错误

debuggingmultithreading应用程序后,我有系统库“ntdll.dll”的错误。 错误代码是0x4000001f(STATUS_WX86_BREAKPOINT)。 错误发生在个案的情况下,只有在通过Delphi IDEdebugging时才会发生。 我在Win7 x64上使用Delphi 2010。 在什么可能是问题? 谢谢。

为什么Windows 10在我的程序中启动额外的线程?

在Visual Studio 2015中,在一个新的空的C ++项目中,为控制台应用程序构build以下内容: int main() { return 0; } 在返回中设置一个中断点,并在debugging器中启动程序。 在Windows 7上,从截点开始,这个程序只有一个线程。 但在Windows 10上,它有五个(!)线程:主线程和四个等待同步对象的“工作线程”。 谁启动线程池(或如何找出)?

WaitForSingleObject是否放弃线程的时间片?

我正在C做一个win32程序 当你有多个线程正在运行,并且其中一个线程正在等待一个事件(例如使用WaitForSingleObject() )时,那个线程是否仍然会得到完整的CPU时间片? 换言之,操作系统是否知道该线程不需要其时间片,直到其中一个事件发出信号为止?