我正在等待一个布尔值随while循环更改,但是while循环永远不会结束?我可能对此有些愚蠢
有效的代码。但是while循环永远不会结束,布尔值更改后我的代码也不会执行:
while(!myCoolBoolean);
//my code when the boolean has changed to true
有点奇怪,因为当我这样做时它可以工作:
while(!myCoolBoolean) {
System.out.print();
}
//my code again
有帮助吗? 编辑:while循环实际上在一个线程中,而myCoolBoolean在另一个线程中被更改
答案 0 :(得分:0)
尝试声明:
.Phony: all server dist clean
IDIR = include
CC ?= gcc
USERFLAGS+=
CLFLAGS += -I$(IDIR) -g -Wall -Wpedantic $(USERFLAGS) -std=c11 -Wno-format-extra-args
ODIR=obj
LDIR=lib
SRCDIR=src
LIBS=-lm
SRCS= $(wildcard $(SRCDIR)/*.c)
DEPS= $(wildcard $(ODIR)/*.o)
OBJ = $(patsubst $(SRCDIR)/%, $(ODIR)/%, $(SRCS:%.c=%.o))
all: server.exe
$(ODIR)/%.o: $(SRCDIR)/%.c
@echo "Making objects..."
mkdir -p $(ODIR)
$(CC) -MMD $(CLFLAGS) -c -o $@ $<
server.exe: $(OBJ)
@echo "Compiling..."
$(CC) -o $@ $(OBJ) $(CFLAGS) $(LIBS)
答案 1 :(得分:0)
我假设您正在尝试等待template <typename Outer>
struct ContainingClass {
template <typename T,class=void>
struct Rule {
Rule(T value);
// ... other members ...
};
template <class U>
struct Rule<void,U> {
Rule();
// ... different members than the non-void Rule<T> ...
};
};
template <typename Outer>
template <typename T, typename U>
ContainingClass<Outer>::Rule<T,U>::Rule(T value) { }
template <typename Outer>
template <typename U>
ContainingClass<Outer>::Rule<void,U>::Rule() { }
的值从另一个线程更改。如果是您的代码正在更新myCoolBoolean
,则应改用myCoolBoolean
和wait()
。
notify()
public Object myCoolObject = new Object();
synchronized(myCoolObject) {
myCoolObject.wait();
}
的地方,执行
myCoolBoolean
synchronized(myCoolObject) {
myCoolObject.notify();
}
将暂停第一个线程,直到第二个线程调用wait();
。
如果您无法更改更新notify();
的代码,则可以将循环更改为
myCoolBoolean
这样,您的代码将在每次迭代中暂停一毫秒,以给其他线程时间来更新标志。如果没有while (!myCoolBoolean) {
wait(1);
}
,仅会在执行循环时用完所有处理时间。