Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以创建一个不使用';即使主线程在windows中使用c/c++;?_C++_Windows_Multithreading - Fatal编程技术网

C++ 是否可以创建一个不使用';即使主线程在windows中使用c/c++;?

C++ 是否可以创建一个不使用';即使主线程在windows中使用c/c++;?,c++,windows,multithreading,C++,Windows,Multithreading,与上图一样,一旦主线程失效,所有其他线程将自动退出 有可能创建一个永不消亡的线程吗?如果main()小心地不调用ExitProcess()(或者在main返回时发生的任何调用),直到所有线程都终止,这是很容易做到的。在完成之前不要退出main。不太可能。CRT启动代码调用main(),然后调用exit()。它终止程序,而不考虑任何其他线程 您必须阻止main()返回。通常使用线程句柄上的WaitForSingleObject()完成 在这种特定情况下,如果在跟踪main的返回时看到线程仍在运行,

与上图一样,一旦主线程失效,所有其他线程将自动退出


有可能创建一个永不消亡的线程吗?

如果
main()
小心地不调用
ExitProcess()
(或者在
main
返回时发生的任何调用),直到所有线程都终止,这是很容易做到的。在完成之前不要退出main。

不太可能。CRT启动代码调用main(),然后调用exit()。它终止程序,而不考虑任何其他线程

您必须阻止main()返回。通常使用线程句柄上的WaitForSingleObject()完成

在这种特定情况下,如果在跟踪main的返回时看到线程仍在运行,那么您忘记了释放/关闭正在使用的Win32资源。

您可以通过调用
ExitThread()
来结束
main()
函数的线程,而无需从
main()
返回。这将结束主线程,但是
main()
之后的CRT关闭代码将不会执行,因此,
ExitProcess()
将不会被调用,并且所有其他线程将继续运行


尽管在这种情况下,您必须注意正确结束所有其他线程。当至少有一个线程不是“后台”线程时,进程将不会终止。

从其他答案中可以看出,这可能是不可能的。问题是你为什么要这样做?这样做会违背操作系统的预期设计

如果你看这个:
您将看到线程是在进程上下文中执行的,而光纤又是在线程上下文中操作的

通过违反这些前提,您可能会在未来的操作系统升级中遇到问题,并且您的代码将变得脆弱


为什么不生成另一个进程并将其保留在后台?通过这种方式,您可以根据需要终止原始流程,如果用户愿意,他们仍然可以终止衍生流程。

您可以,但您可能不应该;这只会让人困惑。您正在积累大量尚未结案的问题。请注意。Win32的可能副本没有“后台”线程。这似乎是一个.NET的概念:尽管Win32确实有线程的“后台处理模式”,但这似乎是不相关的:+1表示
WaitForSingleObject
。尽管如此,他说的是几个线程,所以我只想提到还有一个
WaitForMultipleObjects[Ex]
。在没有CRT清理的情况下结束主线程是一个非常糟糕的主意。我强烈鼓励OP遵循“正常完成”的建议,忽略那些失望的投票者。