난 당신이 Windows에서 실행하는 가정에서 작동합니다. 두 개의 다른 프로세스가 완전히 별개의 주소 공간에서 실행됩니다. MyFunc (프로세스 1에서)에 대한 포인터를 다른 프로세스로 전달하려는 경우 실제로 수행 할 수 있지만 매우 어렵고 훨씬 쉬운 방법이 있습니다 (함수에서 볼 수있는 함수 자체를 가져와야 함). 두 프로세스 모두).
분명히 비동기 적으로 실행한다고해서 반환 된 값이 필요하지는 않습니다. 따라서 어떻게해야하는지 알 필요가있는 것은 다른 프로세스 (CreateProcess를 이미 알고 있음)와 실행 대상을 지정하는 것입니다. 두 번째 프로세스가 MyFunc를 실행하고 종료 한 실행 파일이면 CreateProcess를 사용하여 시작하고 lpCommandLine에 인수를 전달하고 완료 될 때 완료하도록합니다.
런타임에 알 수없는 임의의 함수를 실행하기 위해 다른 프로세스가 필요한 경우 사용 가능한 함수 집합을 DLL에 넣고 DLL 이름과 함수 이름을 두 번째 인수에 전달할 수 있습니다 프로세스 (lpCommandLine에서). 두 번째 프로세스는 LoadLibrary를 사용하여 DLL을로드하고 GetProcAddress를 사용하여 함수의 주소를 (이름으로) 가져옵니다.
일부 기능을 실행하는 데 다른 프로세스가 필요하고 위에서 설명한 명령 줄 인수를 지원하지 않으면 코드 삽입이라고하는 기술을 사용할 수 있습니다. 이것은 다른 프로세스에서 임의의 코드를 실행할 수있게 해주는 매우 진보 된 기술입니다. 이것이 필요한 경우이 대답에 어떻게 할 것인지 추가 할 것입니다. 그렇다면 의견을 게시하십시오.
다른 프로세스에서 고정 기능을 호출하는 데 필요한 주석을 읽은 후 다음을 추가했습니다. 여기
void MyFunc (TCHAR* argument) {
// Validate argument then do something with it...
}
int _tmain(int argc, _TCHAR* argv[])
{
if (argc > 1) {
MyFunc(argv[1]);
}
return 0;
}
(주 과정을 호출하는 방법은 다음과 같습니다 : 명령 줄에서 두 번째 인수로 인수 문자열을 넣어 (! 첫 번째 인수는 실행 파일을 포함하는 것을 잊지 마세요 환난이다) 나는이 생각 정확하지만 실제로 컴파일하고이 코드를 테스트하지 않았다 그것은 당신에게 일반적인 생각)을 얻었다 단지 의도 :.
이
STARTUPINFO si;
PROCESS_INFORMATION pi;
memset (&si, 0, sizeof(si));
memset (&pi, 0, sizeof(pi));
GetStartupInfo(&si);
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
TCHAR CommandLine[1024];
// MyFuncArgument (type == TCHAR*, declaration not shown) is the single argument for MyFunc
// (put it in quotes if needed):
_stprintf(CommandLine, _T("DoMyFunc.exe %s"), MyFuncArgument);
if (CreateProcess (_T(".\\DoMyFunc.exe"), CommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) != 0) {
_tprintf (_T("CreateProcess Succeeded\n"));
}
else {
_tprintf (_T("CreateProcess Failed\n"));
}
그것은 당신이 Windows를 사용하는 링크에서 분명있을 수 있습니다,하지만 그건 정말 중요하다 질문의 일부이며, 당신이 그것을 분명하게 진술했는지 확인해야합니다. – BoBTFish
이 자습서는 좋은 예입니다. http://solarianprogrammer.com/2011/12/16/cpp-11-thread-tutorial/ – Lainezor