多线程

多线程 – 为什么线程饿死甚至抢先的多任务操作系统(Windows 7)

我写了一个Win32应用程序来创建100个线程.每个线程在恢复时将连续(循环)增加与线程对象相关联的64位计数器.如果让系统运行10到15秒,然后停止,那么每个线程都应该看到大致相同的计数.但是我所观察到的是,81条线程运行不到4亿次循环,其余的循环次数超过9.5亿次.最慢的线程只有2.3亿,而最快的2111万.根据MSDN,抢占式多任务处于线程级别,所以我的每个线程都应该以循环方式获得时间片段.我在这里缺少什么,为什么这个差异?

.net – 如何在服务停止的多线程Windows服务中停止工作线程

解决方法的确,应该避免中止.最好给他们一些时间优雅地退出–也许在超时后可能会考虑中止他们–但最终,服务停止可以通过杀死进程来做到这一点.我会尝试在我的队列中发出一个“冲洗和退出”的信号–很像“关闭”方法here,但是在完成时有一些信号.如果你诉诸中止–认为这个过程是致命的.尽快杀死它

多线程 – 具有隐藏窗口的线程的线程消息循环?

我有一个Delphi6应用程序,它有一个专用于与使用SendMessage()和WM_copYDATA消息与外部程序连接的外部应用程序进行通信的线程.因此,我使用AllocateHWND()创建一个隐藏窗口来满足此需求,因为由于SendMessage()函数只接受窗口句柄而不是线程ID,因此线程消息队列将无法工作.我不确定的是在线程Execute()方法中放入什么.我假设如果我使用GetMessage()循环或创建一个带有WaitFor*()函数的循环调用,那么线程将阻塞,因此线程的WndProc()永远

多线程 – Delphi类变量是否具有全局或线程本地存储?

我的猜测是类变量在存储中是真正的全局变量.但我想知道是否是这种情况,或者它们是否是存储中的线程–每个线程一次实例.谁知道?编辑:将“范围”更改为“存储”,因为这实际上是正确的术语,以及我所追求的解决方法是的,类变量是全局范围的.有关如何实现threadvars的详细信息,请查看RTL源代码.在Win32下,每个线程都可以在创建线程时自动为其分配一块内存.这个额外的数据区域用于包含您的threadvars.

通过多线程处理大文件

磁盘上有一个非常大的文件(>10G),fie中的每一行都由一个行号和一个人的名字组成,如下所示:我必须读取这个大文件,并找到每个名称的频率,最后按每个名称频率的降序输出结果,如下所示:面试官要求,上述工作应尽可能高效地完成,并允许多线程.我的解决方案是这样的:>因为文件太大,我将文件分成几个小文件,每个小文件大约100M,通过lseek我可以找到每个小文件的开头和结尾(求,结束);>对于这些小文件

多线程 – 线程如何通知没有窗口句柄的对象?

我是多线程的新手,但不是一个完整的新手.我需要在工作线程中执行对Web服务的调用.在主线程中,我有一个表单,它有一个私有数据成员,只有工作线程才能写入.当工作线程完成其webservice调用并将结果响应xml写入表单上的私有成员时,工作线程使用PostMessage将消息发送到表单的句柄.它工作得很好,但现在我想从数据模块做同样的事情……

java – 一起进行多线程和递归

解决方法这是Fork/Joinframework的一个很好的例子,它将被包含在Java7中.作为与Java6一起使用的独立库,可以下载到here.像这样的东西:fork/join框架的关键点是工作窃取–在等待子任务线程完成时执行其他任务.它允许您以直接的方式编写算法,同时避免线程耗尽的问题,作为ExecutorService的天真应用程序.