다른 프로그램의 메모리를 읽는 스레드가 있습니다. 읽은 정보는 전역 변수에 저장됩니다. 그런 다음이 정보에서 작동하는 다른 스레드를 만듭니다.스레드 간 정보 전달
변수를 0으로 초기화했습니다. 첫 번째 스레드가 작성되면 (다른 프로그램의 메모리를 읽는 스레드), 읽은 값을 콘솔에 인쇄하여 값을 올바르게 읽습니다. 필자의 주요 기능에서는 여전히 0으로 인쇄됩니다.
std :: atomic을 시도했지만이 인스턴스에서는 작동하지 않습니다. 같은 스레드에 있지 않아도 변수를 수락하려면 어떻게해야합니까? 여기
내가 스레드를 만드는 방법은 다음과 같습니다
int bob = 0;
int main()
{
CreateThreads();
if (bob)
{
std::cout << "T2 bob: " << bob << std::endl;
}
else
{
std::cout << "T2 bob: uninitialized" << std::endl;
}
}
내 테스트 기능 :
void TestFunction()
{
ReadProcessMemory(hProcess, lpBaseAddress, &bob, sizeof(bob), 0);
std::cout << "T1 bob: " << bob << std::endl;
}
void OtherTestFunction()
{
if (bob)
{
std::cout << "T2 bob: " << bob << std::endl;
}
else
{
std::cout << "T2 bob: uninitialized" << std::endl;
}
}
감사
다음std::thread tTest([ & ]
{
TestFunction();
});
vecThreads.push_back(move(tTest));
std::thread tTest2([ & ]
{
OtherTestFunction();
});
vecThreads.push_back(move(tTest2));
내가 주에 무엇의 예입니다!
이것은 문제가 아니지만 람다가 필요하지 않습니다. 스레드가 호출 할 함수의 주소를 전달하기 만하면됩니다. –
'bob'은'main' 안에있는 지역 변수입니다. 코드에는 다른 '밥 (bob)'이 정의되어 있지 않으므로 '메인'바깥에있는 '밥 (bob)'의 사용은 합법적이지 않습니다. 실제 코드 게시. –
피트, 때로는 필자의 함수가 매개 변수를 취하는 경우가 있는데, 이렇게하면 다른 방법으로 작업하는 것이 훨씬 쉽습니다. p - "실제 코드"와 마찬가지로 실제로 필요한 것입니다. 다른 것들은 그냥 Bob을 클래스로 바꾸는 것처럼 복잡하게 만들며 그 클래스는 다른 클래스를 상속하고 다른 객체를 정의합니다. –