Articles of multithreading

在线程中调用SHGetFileInfo以避免UI冻结

在.NET 4.0应用程序(WPF)中,我们使用SHGetFileInfo来获取目录树的shell图标。 因为在某些情况下(比如无法访问的networking驱动器或软盘驱动器)需要相当长的一段时间,所以我们希望在一个线程中执行此操作,然后在读取图标时更新图标。 调用基本相同,现在只是在一个线程内执行。 因为有人说线程必须是STA才能工作,所以我们使用Thread而不是ThreadPool来进行testing,结果相同。 使用ThreadPool也没有工作。 SHGetFileInfo成功(返回1),但结构中的hIcon成员为零。 IntPtr GetIcon(string name) { Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES | Shell32.SHGFI_SMALLICON; Shell32.SHGetFileInfo( name, System.IO.Directory.Exists(name) ? Shell32.FILE_ATTRIBUTE_DIRECTORY : Shell32.FILE_ATTRIBUTE_NORMAL, ref shfi, (uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi), flags ); return shfi.hIcon; } 非常相同的代码从GUI线程工作正常。 为了使这个函数能够从一个单独的线程中工作,或者使它在不阻塞GUI线程的情况下工作,需要做些什么? 更新:这个代码基本上是这样的: var thread = new System.Threading.Thread(() => { var result = GetIcon("C:\\"); // […]

c – 中断正在线程中执行的函数调用

我有一个DLL包含一个线程函数,其伪代码看起来像: volatile BOOL stopped = FALSE; void StopEverything() { /* Enter critical section */ stopped = TRUE; /* Leave critical section */ } void workerThreadFunc() { Initialize(); /* Checkpoint 1 */ if(stopped) { /* Do cleanup */ return; } doLaboriousTask1(); /* Checkpoint 2 */ if(stopped) { /* Do cleanup */ return; } doLaboriousTask2(); Uninitialize(); } […]

从套接字中杀死一个等待hGetLine的线程(Windows)

如果我在Windows(10)机器上运行下面的Java程序(为了完整起见,我在这里发布程序): public class IdleServer { public static void main(String[] args) throws IOException, InterruptedException { ServerSocket serverSock = new ServerSocket(9090); Socket sock = serverSock.accept(); while (true) Thread.sleep(1000); } } 然后我从Haskell连接到Java服务器: readWithinNSecs :: IO () readWithinNSecs = withSocketsDo $ do h <- connectTo "localhost" (PortNumber 9090) hSetBuffering h NoBuffering readerTid <- forkIO $ reader h threadDelay $ […]

在新的控制台窗口中打开一个Python线程

我试图做一个程序,将启动一个视图窗口(控制台)和一个命令行。 在视图窗口中,它会显示不断更新,而命令行窗口将使用raw_input()来接受影响视图窗口的命令。 我正在考虑使用线程,但我不知道如何在新的控制台窗口中启动一个线程。 我该怎么做?

互斥真的很慢吗?

我已经阅读了很多次,在这里和在网上的任何地方,互斥体比关键节/信号量/ insert-your-preferred-synchronization-method-here要慢。 但我从来没有看到任何文件或研究或任何备份这一说法。 那么,这个想法从哪里来? 这是一个神话还是一个现实? 互斥真的很慢?

CRITICAL_SECTION设置并获得单一的bool值

现在写复杂的class ,觉得我用了很多CRITICAL_SECTION 。 据我所知,有一些types的primefaces操作,总是执行没有任何硬件或软件中断。 我想检查我是否正确理解一切。 设置或获取primefaces值,我们不需要CRITICAL_SECTION因为这样做不会有中断。 bool是primefaces的。 所以有我的陈述,要问,如果他们是正确的,如果他们是正确的,什么types的variables也可以设置或得到没有CRITICAL_SECTION ? PS我正在谈论获取或设置每个方法一个单一的值 ,而不是两个,不是五个,而是一个。

在C ++的两个不同的内核中创build两个线程

我读了一些关于这个问题的文章。 这个案子似乎并不容易。 我想在两个核心中创build两个不同的线程。 我读的文章太复杂了。 我甚至无法根据这些文章创build一个简单的线程。 另一方面,我需要了解计算机必须具备多less内核,才能在一个内核上使用内核或只创build线程。 我想在窗户上做。 任何帮助将非常欢迎 PS:我不是在C + +亲。 所以如果有可能,请指导我更简单的方法。

上下文切换可能导致高CPU

我们正在分析性能问题,我们最多可能有500个工作线程,CPU使用率不是很高。 上下文切换可能导致高CPU? 换句话说,由于CPU使用率不高,上下文切换(500个线程)在这里不成问题。

提高Windows的互斥体实施

据我所知,在旧版本的Boost boost::mutex实现中,Windows是使用临界区域完成的。 但在最新版本的Boost 1.51中,我发现互斥体的实现是基于事件的。 有人知道这个变化背后的理由是什么吗? 是否因性能原因而完成? 关键部分是否被弃用?

multithreading和多进程的性能差异

几年前,在Windows环境中,我做了一些testing,让CPU计算密集型+内存访问密集型+ I / O访问密集型应用程序的多个实例运行。 我开发了两个版本:一个在多处理下运行,另一个在multithreading下运行。 我发现多处理的性能要好得多。 我读了其他地方(但我不记得该网站)。 其中的原因是在multithreading的情况下,对于单个内存pipe道和I / Opipe道来说,它们是“战斗”的,这使得性能比多处理 但是,我再也找不到那篇文章了。 我想知道,直到今天,下面的情况是否仍然如此? 在Windows中,使algorithm代码在多处理下运行,性能会比multithreading更好。