gpt4 book ai didi

windows - Windows 上的 EnterCriticalSection 和 CRITICAL_SECTION

转载 作者:可可西里 更新时间:2023-11-01 11:33:42 25 4
gpt4 key购买 nike

在我的 const' 中 - 我希望 'secondCommand' 仅在 'firstCommand' 之后被调用。我尝试使用 EnterCriticalSection,但问题是,从哪里启动我的锁 -如果我在构造函数中执行此操作(在##),并在“firstCommand”(在##)之后释放锁,并尝试在“secondCommand”(在###)之前再次获取锁,它可能无法工作,因为在###,即使锁被锁定 - secondCommand 仍然可以被调用 - 因为锁定是在同一个 thead 中获得的(就像连续两次调用“lock”和“lock”一样 - 不会有死锁)。

另一方面,如果我在“firstCommand”之前(在####)锁定并在“firstCommand”之后(在##)立即释放,当检查锁是否被锁定时 - 锁可以未初始化 - 这会引起问题。这是我的代码:

myClass::myClass (){
#
threadFunction();
###
secondCommand();
}

void myClass::threadFunction(){
DWORD threadID;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadFunc,0, 0, &threadID);
}

threadFunc(){
####
firstCommand();
##
while(true){};
}

这似乎是一个简单的问题,但我已经尝试解决一个小时了。有人可以帮忙吗?

最佳答案

我认为您最好使用事件:查看 CreateEvent , SetEventWaitForSingleObject

您将在构造函数中创建事件,在“###”处等待它,并在“##”处设置它。您可能应该检查 WaitForSingleObject 的返回值;如果成功,它将是 WAIT_OBJECT_0。

关于windows - Windows 上的 EnterCriticalSection 和 CRITICAL_SECTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com