Articles of multithreading

跨平台等同于Windows事件

我试图移植一些Windows代码到Linux,理想情况下通过独立于平台的库(例如boost),但是我不知道如何移植这一点的事件代码。 代码位包含两个线程(让我们称之为A和B)。 A想要做的事情只有B可以,所以它发送一个消息,然后等待B说完成。 在Windows中,这看起来像这样: void foo();//thread a calls this void bar(HANDLE evt); void foo() { HANDLE evt = CreateEvent(0,FALSE,FALSE,0); bCall(boost::bind(&bar, evt)); WaitForSingleObject(evt,INFINITE); CloseHandle(evt); } void bar(HANDLE evt) { doSomething(); SetEvent(evt); } 我查看了boost :: thread库,但似乎没有任何这样做,closures我可以看到的是boost :: condition_variable,但它似乎意味着与一个互斥的结合,这是不是这里。

有效的线程数

我想优化我的应用程序线程数量。 几乎所有的CPU都有相同的IO值。 在系统中没有其他应用程序运行时,线程的有效数量是多less。 我想要Windows和JVM下的答案。

如何正确地终止一个dll内的挂起的线程?

大家好, 我有一个包含错误的第三方库。 当我调用一个函数时,它可能会挂起。 库函数在dll中调用。 我决定把呼叫转移到线程中,等待一段时间。 如果线程完成,然后确定。 如果不是 – 我应该终止它的强制性。 这里简单的例子: unsigned Counter = 0; void f() { HANDLE hThread; unsigned threadID; // Create the second thread. hThread = (HANDLE)_beginthreadex( NULL, 0, DoSomething, NULL, 0, &threadID ); if (WAIT_TIMEOUT == WaitForSingleObject( hThread, 5000 )) { TerminateThread(hThread, 1); wcout << L"Process is Timed Out"; } else { […]

如何使方法运行在“后台”(线程?)

我目前有一些代码循环通过文本文件寻找一个特定的短语。 但是,当这个方法运行时,整个应用程序将被locking。 我假设,因为它循环,这是我想要的。 我希望这发生在后台,所以正常的方法和用户与应用程序的交互仍然可以完成。 这怎么做/改进? private void CheckLog() { while (true) { // lets get a break Thread.Sleep(5000); if (!File.Exists("Command.bat")) { continue; } using (StreamReader sr = File.OpenText("Command.bat")) { string s = ""; while ((s = sr.ReadLine()) != null) { if (s.Contains("mp4:production/")) { // output it MessageBox.Show(s); } } } } }

C ++multithreading执行速度减慢

我在写一个multithreading的c ++应用程序。 当线程A有一个非常昂贵的计算操作来执行时,会减慢线程B,C和D.如何防止这种情况?

我如何检测一个线程是否有窗口句柄?

我怎样才能以编程方式检测一个线程是否有一个给定的进程的窗口句柄? 间谍++给了我这个信息,但我需要以编程方式。 我需要在C#中执行此操作,但.net诊断库不会提供此信息。 我想间谍++是使用一些我不知道的Windows API调用。 我有权访问我正在尝试debugging的系统的代码。 我想定期embedded一些定时器调用的代码,它将检测有多less个线程包含窗口句柄并logging这些信息。 谢谢

处理消息太慢,导致一个干扰,无响应的用户界面 – 我怎样才能使用多个线程来缓解呢?

我无法保持我的应用程序响应用户操作。 因此,我想在多个线程之间拆分消息处理。 我可以简单地创build几个线程,从它们中的同一个消息队列中读取,并且让每个消息处理哪个消息? 如果是这样,那怎么能做到呢? 如果不是的话,你能提出解决这个问题的另一种方法吗?

C ++ – Sleep()和cin如何工作?

只是好奇。 Sleep()函数实际上是如何工作的(在windows.h中声明的)? 也许不仅仅是这个实现,而是任何人。 我的意思是 – 它是如何实现的? 如何使代码在特定时间“停止”? 也好奇cin >>和那些实际上工作 。 他们究竟做了什么? 我知道如何“阻止”继续运行的唯一方法是使用while循环,但是考虑到这与处理从stdin读取方法时发生的情况相比,需要大量的处理能力(只是比较一段时间(真正)从标准input读取),我猜这不是他们做的。

CString在内核中与HeapWalk和HeapLock / HeapUnlock死锁结合使用

我的目标是locking为我的进程堆分配的虚拟内存(以防止将其交换到磁盘的可能性)。 我使用下面的代码: //pseudo-code, error checks are omitted for brevity struct MEM_PAGE_TO_LOCK{ const BYTE* pBaseAddr; //Base address of the page size_t szcbBlockSz; //Size of the block in bytes MEM_PAGE_TO_LOCK() : pBaseAddr(NULL) , szcbBlockSz(0) { } }; void WorkerThread(LPVOID pVoid) { //Called repeatedly from a worker thread HANDLE hHeaps[256] = {0}; //Assume large array for the sake […]

从线内分叉是否安全?

让我解释一下:我已经在Linux上开发了一个应用程序,它分叉和执行外部二进制文件并等待它完成。 结果由fork +进程独有的shm文件传递。 整个代码封装在一个类中。 现在我正在考虑线程化,以加快速度。 具有许多不同的类函数实例,并发地(使用不同的参数)分离和执行二进制文件,并与自己的独特的shm文件交stream结果。 这个线程安全吗? 如果我在一个线程内分叉,除了安全之外,还有什么我需要注意的吗? 任何意见或帮助,非常感谢!