멀티 스레딩에 대해서는 거의 알지 못합니다. 그러나 다른 프로그래머와 협력 중이며 원래 프로그래머는 더 이상 필요하지 않기 때문에 도움이 필요합니다.뮤텍스/멀티 스레딩/공유 리소스 문제 WinAPI
프로그램은 그것을 실행하는 자체 exe를 가지고 있지만 DLL은 APIENTRY (WINAPI)를 통해 다른 프로그램의 프로세스에 연결됩니다 ... DLL이 프로세스에 연결되면 몇 개의 뮤텍스가 생성됩니다. 문제는 이러한 뮤텍스 중 하나를 한 번만 만들어야하며 각 프로세스에서 액세스 할 수 있어야한다는 것입니다. 각 프로세스가 자체 핸들을 작성하는 것을 막을 수는 없습니다. 적어도 일부 작업 중에는 핸들을 다른 프로세스로 전달하거나 각 프로세스에서 각 핸들을 가져와 동일한 작업을 적용 할 수 있어야합니다 (기본적으로 일부 변수를 동기화하는 경우). 이전 정적 bool isFirst 접근 방식을 시도했지만 각 프로세스는 새로운 변수 집합을 만들어서 작동하지 않습니다.
나는 정말 혼란스럽고 좌절하고 있습니다. 어떤 생각이나 아이디어라도 높게 평가 될 것입니다.
감사합니다. 도움이됩니다. 뮤텍스 핸들을 "넘겨주는"특별한 방법이 있습니까? DLL에서 정적 핸들을 만들었고 (handle1이라고 부름), 권고 한대로 WaitForSingleObject (handle1, INFINITE)를 사용했습니다 ... 여전히 개별 프로세스가 다른 핸들을 사용하고있는 것처럼 보입니다 ... – Paul
그래서. 확인하기 만하면 InitInstance에서 CreateMutex를 호출하여 뮤텍스를 만들고 핸들을 가져옵니다. 그렇습니까? 주어진, 나는 GetMutex() {return g_hMutex;} 함수를 만들어서 다른 프로세스가 호출 할 수있는 DLL에 만들 것이다. DLL에서 WaitForSingleObject를 호출하고 있습니까? 왜 그렇게하고 싶은지 모르겠다. 중요한 것은 WaitForxxxx **를 통해 뮤텍스의 소유권을 가진 프로세스는 다른 프로세스가 가져올 수 있도록 ReleaseMutex (핸드)를 호출해야한다는 것입니다. 그거하고 있니? –
InitInstance가 MFC가 아니기 때문에 호출되지 않은 것을 발견했습니다. WinMain으로 초기화 (g_hMutex = CreateMutex (0,0,0);)를 옮겼습니다. WaitForSingleObject는 DLL의 함수 내에서 호출됩니다. 왜? 확실하지는 않습니다. 원래 프로그래머가이 작업을 수행했습니다. 나는 그것이 우리가 실제로 붙잡고있는 프로세스에 대한 제어권을 가지고 있지 않기 때문에 (나는이 문장에 너무 혼란 스럽다.) – Paul