Articles of multithreading

如何获取进程的主线程标识(由其ID标识)?

你能帮我find一个ID进程的主(唯一)线程ID吗? 任务上下文:正在运行的进程(目前)没有窗口,而是(某些)线程。 通缉:仅在主线程中发布WM_QUIT 。 不想要的:在非主线程上使用TerminateProcess或发送WM_QUIT 。

读取互锁variables

承担: A. WIN32下的C ++。 B.使用InterlockedIncrement()和InterlockedDecrement()递增和递减正确alignment的易失性整数。 __declspec (align(8)) volatile LONG _ServerState = 0; 如果我只想读取_ServerState,是否需要通过InterlockedXXX函数读取variables? 例如,我看过如下的代码: LONG x = InterlockedExchange(&_ServerState, _ServerState); 和 LONG x = InterlockedCompareExchange(&_ServerState, _ServerState, _ServerState); 目标是简单地读取_ServerState的当前值。 我不能简单地说: if (_ServerState == some value) { // blah blah blah } 似乎有一些WRT这个问题混淆。 我知道寄存器大小的读取在Windows中是primefaces的,所以我认为InterlockedXXX函数是不必要的。 马特·J 好的,谢谢你的回应。 顺便说一下,这是Visual C ++ 2005和2008。 如果这是真的,我应该使用InterlockedXXX函数来读取_ServerState的值,即使只是为了清楚起见,什么是最好的方式去做呢? LONG x = InterlockedExchange(&_ServerState, _ServerState); 当我真正想做的事情是读取它时,这有修改价值的副作用。 不仅如此,如果存在上下文切换,则可能会将该标志重置为错误值,因为在调用InterlockedExchange()准备过程_ServerState的值压入堆栈。 […]

C ++如何从DLL(Windows)的文件名获得进程ID?

我怎样才能从一个文件名获得进程ID? 像: int processId = getProcessIdByFileName("Network.dll"); 顺便说一句,哪个数据types有进程ID? 扩展信息:我有一个DLL的源代码。 这个DLL被加载到一个应用程序,就像其他一些DLL一样。 我想挂钩其他DLL的function。 因此,我需要它们的进程ID(是否有每个DLL的进程ID,如果他们都在一个应用程序下运行? 我怎样才能调用我的DLL里面的其他DLL的函数? 如何得到他们的处理?

types2虚拟主机是否受到与主机操作系统相同的限制?

主机操作系统是否对types2虚拟主机(即VirtualBox)的客户操作系统施加限制? 例如:在Ruby中,创buildsubprocess就像调用fork一样简单。 但是,不支持在Windows上分支,而是必须为multithreading产生一个完整的进程。 据我所知,这是操作系统的一个限制,而不是编程语言。 将Windows作为主机操作系统强制这些限制在Linux客户操作系统? 如何将给客户机操作系统的命令传递给主机操作系统?

挂钩线程创build/终止

是否有可能挂钩到Windows上的线程终止? IOW,如果进程中的线程(对其他进程和线程不感兴趣)已经终止(通常或者更重要 – 强制),我希望得到通知。 另外,挂钩到线程创build也可以。 理由:我有一个基于每个线程pipe理一些信息的库(把它想象成一个进程范围内的每个线程caching来获取一些信息)。 当线程被终止时,我必须从caching中删除所有线程特定的信息。 [caching关联是通过使用线程ID来实现的,这些线程可能会被重用于将来的线程。] “正常”执行顺序没有问题,因为库用户将从库中分离当前线程,这将清除状态。 如果有人杀死拥有caching资源的线程,就会出现问题。

识别处理器(核心)由特定线程使用

我想知道是否有可能确定物理处理器(核心)是由具有特定线程ID的线程使用? 例如,我有一个multithreading的应用程序有2个线程(例如,threadid = 10和threadid = 20)。 我在具有双核处理器(核心1和核心2)的系统上运行应用程序。 那么,如何知道threadid为20的线程使用的核心数呢? PS Windows平台。 谢谢, 丹尼斯。

SetThreadPriority和SetPriorityClass

我不明白如何使用SetThreadPriority和SetPriorityClass来降低和增加一个线程的优先级。 我的理解是, SetPriorityClassselect可用于进程的优先级范围, SetThreadPriority设置类内的相对优先级。 例如,对于一个线程执行此操作的结果是什么: SetPriorityClass(GetCurrentProcess(), PROCESS_MODE_BACKGROUND_BEGIN); SetThreadPriority(GetCurrentThread(), THREAD_MODE_BACKGROUND_END); 感谢帮助。

在QueueUserAPC中指定的callback不会被调用

在我的代码中,我使用QueueUserAPC来中断他当前工作中的主线程,以便在返回他之前的工作之前先调用一些callback。 std::string buffer; std::tr1::shared_ptr<void> hMainThread; VOID CALLBACK myCallback (ULONG_PTR dwParam) { FILE * f = fopen("somefile", "a"); fprintf(f, "CALLBACK WAS INVOKED!\n"); fclose(f); } void AdditionalThread () { // download some file using synchronous wininet and store the // HTTP response in buffer QueueUserAPC(myCallback, hMainThread.get(), (ULONG_PTR)0); } void storeHandle () { HANDLE hUnsafe; DuplicateHandle(GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), […]

在4GB iMac OSX 10.6.3 Snow Leopard(32位)上无法通过2542个Java线程

我正在运行下面的程序,试图找出如何configuration我的JVM,以获得我的机器可以支持的最大线程数。 对于那些可能不知道的人,Snow Leopard附带Java 6。 我试着用默认值和下面的命令行来启动它,无论JVM选项设置为什么,我总是在线程2542上得到“内存不足错误”。 java TestThreadStackSizes 100000 java -Xss1024 TestThreadStackSizes 100000 java -Xmx128m -Xss1024 TestThreadStackSizes 100000 java -Xmx2048m -Xss1024 TestThreadStackSizes 100000 java -Xmx2048m -Xms2048m -Xss1024 TestThreadStackSizes 100000 无论我通过它,我得到相同的结果,在2542内存不足错误 public class TestThreadStackSizes { public static void main(final String[] args) { Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(final Thread t, final Throwable e) { System.err.println(e.getMessage()); System.exit(1); } […]

互斥或不互斥?

如果我只有一个读者和一个作者,我需要一个互斥体吗? 阅读器从队列中获取下一个命令( food.front() ),并根据该命令执行任务。 命令执行后,会popup命令。 队列的作者将命令推送到队列( food.push() )。 我需要一个互斥体吗? 我的阅读器(消费者)只执行,如果food.size() > 0 。 我正在使用读取器线程并发送线程。