通过在 Visual C++ 中传递函数来创建进程

Posted

技术标签:

【中文标题】通过在 Visual C++ 中传递函数来创建进程【英文标题】:Create Process by passing a Function in Visual C++ 【发布时间】:2012-10-26 05:18:36 【问题描述】:

我是 C++ 新手,正在开发一个需要并行处理的模块。

我需要通过将不同的函数(执行某些特定任务)传递给从 C++ 中的 main(类似于 _beginthread)创建的每个进程来创建 2 或 3 个进程,其中 main 应该在创建所有进程后立即退出,并且创建的新进程将继续运行,直到完成。

当我尝试使用线程时,我的 main 应该等到我的所有线程都完成,如果不是我的 main 退出时,我所有的孩子都被杀死了。但我不想要这种方法,因为多个 DLL 中存在许多主要方法。我需要调用每个 DLL 中的每个 main,这些 main(s) 将负责创建所需数量的进程。

我尝试查看具有以下语法的CreateProcess 函数。

BOOL WINAPI CreateProcess(
  _In_opt_     LPCTSTR lpApplicationName,
  _Inout_opt_  LPTSTR lpCommandLine,
  _In_opt_     LPSECURITY_ATTRIBUTES lpProcessAttributes,
  _In_opt_     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_         BOOL bInheritHandles,
  _In_         DWORD dwCreationFlags,
  _In_opt_     LPVOID lpEnvironment,
  _In_opt_     LPCTSTR lpCurrentDirectory,
  _In_         LPSTARTUPINFO lpStartupInfo,
  _Out_        LPPROCESS_INFORMATION lpProcessInformation
);

基于此,我理解我一开始所说的将传递给进程的函数应该创建为单独的控制台应用程序(例如:exe),然后在此处使用。

我的理解正确吗?或者有没有其他方法可以真正在独立的进程中调用函数?

如果需要更多信息,请告诉我

【问题讨论】:

【参考方案1】:

是的,你理解正确。 当您使用 CreateProcess() 时,它实际上创建了一个与 main 无关的进程。 您也可以从一个程序中创建多个进程,这些进程完全相互独立。

不需要在独立的进程中调用函数。

【讨论】:

感谢您的回答。所以我不能在单独的进程中调用函数?我需要为我在函数中执行的任务创建一个单独的应用程序,并调用 CreateProcess 并传递我创建的 exe。对吗? 我想这可能会对你有所帮助。social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/…【参考方案2】:

通常你会通过使用线程来解决问题,然后等待线程在退出你的主函数之前完成。您可以等待线程完成。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms687025%28v=vs.85%29.aspx

【讨论】:

感谢您的回答。但这不是我要找的。我不想在主函数中等待,直到我的线程完成。我希望它们完全独立于 main。

以上是关于通过在 Visual C++ 中传递函数来创建进程的主要内容,如果未能解决你的问题,请参考以下文章

(Visual) C++ 中动态创建函数的调用约定

在 Visual C++ 中切换子进程窗口可见性而不重新启动子进程

Visual C++ 检查进程内存中的对象实例大小[关闭]

在 Visual C++ 中删除 SSE2 内在函数

如何强制在 Visual C++ 的发布模式下创建函数 [重复]

win进程崩溃弹出Microsoft Visual C++ Runtime Library的解决办法