我正在编写一个缓存处理程序,它需要应用程序的每个实例的唯一 ID 号,这样当有人在两个实例中打开两个项目时,缓存不会混淆。根据这个线程HINSTANCE
,传递给的似乎WinMain
是模块的句柄,它可能只是 exe,不一定是唯一的进程 ID。
该线程似乎说有关要运行的模块/进程的信息只被带入内存一次,并且HINSTANCE
是一个句柄。这是否意味着HINSTANCE
不能用作进程的唯一标识符,因为它们都指向同一个模块?还是我弄错了?
我正在编写一个缓存处理程序,它需要应用程序的每个实例的唯一 ID 号,这样当有人在两个实例中打开两个项目时,缓存不会混淆。根据这个线程HINSTANCE
,传递给的似乎WinMain
是模块的句柄,它可能只是 exe,不一定是唯一的进程 ID。
该线程似乎说有关要运行的模块/进程的信息只被带入内存一次,并且HINSTANCE
是一个句柄。这是否意味着HINSTANCE
不能用作进程的唯一标识符,因为它们都指向同一个模块?还是我弄错了?
HINSTANCE
大部分已过时,是 16 位时代的遗留物。对于您的应用程序的所有实例,它将具有相同的值。
对于唯一的进程 ID,请使用GetCurrentProcessId
在 Win32 上,HINSTANCE
对应于HMODULE
可执行文件的 ,而后者又归结为它的基地址。它以任何方式都不是该进程独有的——AFAIK 给定的可执行文件将始终加载到其请求的基地址。
您可以为您的任务使用进程 ID,或者,如果进程 ID 被回收这一事实是一个问题,或者如果您更喜欢跨机器的唯一 ID,则只需在启动时生成一个新的 GUID 并将其用作 ID。