我已经读过你应该Object.wait()在一个while循环中用Java调用它.原因是这个线程可能被唤醒,你等待通知的条件仍然是假的(虚假的唤醒).
怎么样Object.wait(long timeout).在这里,您不希望循环该条件,因为您希望它在指定的时间后超时.但是如果你不把它放在一个循环中那么你怎么能确保它不会被提前唤醒呢?
鉴于以下内容:
typedef struct{
...
...
} A;
typedef struct{
...
...
} B;
typedef union __attribute__((transparent_union)) {
A a;
B b;
} C;
Run Code Online (Sandbox Code Playgroud)
如果我声明一个函数
myMethod(C){
...
}
Run Code Online (Sandbox Code Playgroud)
以下是合法的,没有明确的转换:
A myA;
B myB;
meMethod(myA);
myMethod(myB);
Run Code Online (Sandbox Code Playgroud)
(来自:" c unions and polymorphism ")
但是,为什么以下不允许:
C cArray[2];
c[0]=myA;
c[1]=myB;
Run Code Online (Sandbox Code Playgroud)
这会在没有显式转换的情况下产生不兼容的类型错误.有没有办法避免显式铸造?
可能的重复:
如何在 C 中模拟 OO 风格的多态性?
我正在尝试使用联合在 C 中创建多态性。我执行以下操作。
typedef struct{
...
...
} A;
typedef struct{
...
...
} B;
typedef union{
A a;
B b;
}C;
Run Code Online (Sandbox Code Playgroud)
我的问题是:我怎么能有一个采用 C 类型但也允许 A 和 B 的方法。我希望以下内容起作用:
如果我定义一个函数:
myMethod(C){
...
}
Run Code Online (Sandbox Code Playgroud)
然后,我希望这个工作:
main(){
A myA;
myMethod(myA);
}
Run Code Online (Sandbox Code Playgroud)
它没有。有什么建议?
我已经定义了以下结构:
typedef struct {
double salary;
} Employee;
Run Code Online (Sandbox Code Playgroud)
我想改变它的价值salary.我尝试通过引用传递它,但值保持不变.以下是代码:
void raiseSalary (Employee* e, double newSalary) {
Employee myEmployee = *e;
myEmployee.salary = newSalary;
}
Run Code Online (Sandbox Code Playgroud)
当我调用此函数时,salary保持不变.我究竟做错了什么?