نه ببین خوب دو تا خط که هم دارن واس خودشون می رن من می خوام ی تابعی رو تو Thread1 صدا زدم صبر کنه تا Thread2 برسه به جایی که می خوام و بعد دستور رو اجرا کنه و ..
ی همچین جیزی خودم نوشتم نتیجه داد
BOOL gAppLoop = true;
HANDLE gEvent = nullptr;
volatile BOOL gDoCommand = FALSE;
HANDLE gThreads[2];
void DoCommand()
{
if(gDoCommand)
{
//call function ...
SetEvent(gEvent);
gDoCommand = false;
}
}
DWORD Thread1(void* ptr)
{
while(gAppLoop)
{
if(rand() % 33 = 2)
{
gDoCommand = true;
::WaitForSingleObject(gEvent, INFINITE);
}
//...
}
}
DWORD Thread2(void* ptr)
{
while(gAppLoop)
{
DoCommand();
//...
}
}
int main(int argc, char** argv)
{
lThreads[0] = ::CreateThread(nullptr, 0, Thread1, nullptr, 0, nullptr);
lThreads[1] = ::CreateThread(nullptr, 0, Thread2, nullptr, 0, nullptr);
gEvent = ::CreateEventA(nullptr, TRUE, FALSE, nullptr);
::WaitForMultipleObjects(2, lThreads, true, INFINITE);
}