【发布时间】:2017-01-18 15:17:59
【问题描述】:
我需要运行例如:
ShellExecute(NULL, "open", "program.exe", NULL, NULL, SW_HIDE);
作为新线程,但我不知道如何。 我试过这个:
HANDLE hThread = (HANDLE) _beginthread(ShellExecute(NULL, "open", "program.exe", NULL, NULL, SW_HIDE), 0, NULL);
WaitForSingleObject( hThread, INFINITE );
但显然是错误的,无法编译。我该怎么做?
【问题讨论】:
-
您不太可能需要一个新线程。
ShellExecute是异步的。它会立即返回。它不会阻塞其他进程。如果您要开始一个新流程,CreateProcess通常是首选。如果您想在新线程中执行此操作,请使用此签名void( __cdecl *start_address )( void * )创建一个调用ShellExecute的函数。然后将该函数传递给_beginthread。如果您使用的是 C++,那么使用std::thread肯定会更有意义。 -
你想在自己的线程中运行
ShellExecute(或ShellExecuteEx)的唯一原因是,你需要在那个线程上初始化COM,它可能会与调用线程的公寓。但是,您甚至没有尝试这样做,因此完全不清楚为什么您认为需要启动一个线程,然后阻止它完成执行。这并没有实现任何有用的东西。
标签: c++ winapi shellexecute beginthread