我是Maven和IntelliJ IDEA的新手.
我有一个用Java 8编写的Maven项目.每当我尝试构建它时(Maven Projects窗口 - >生命周期 - >编译 - >运行Maven Build)我得到一系列编译错误:
[ERROR] path/to/file.java:[26,52] lambda expressions are not supported in -source 1.5
(use -source 8 or higher to enable lambda expressions)
Run Code Online (Sandbox Code Playgroud)
我应该在哪里更改-source参数的值?我尝试在Settings - > Compiler - > Java Compiler中添加它作为附加参数,但我得到了相同的结果.
项目和模块的语言级别都设置为8.0.
我正在使用Maven 3.2.3和IntelliJ IDEA Community Edition 13.1.2.
这个问题是这个帖子中评论的后续内容.
我们假设我们有以下代码:
// (1)
lock (padlock)
{
// (2)
}
var value = nonVolatileField; // (3)
Run Code Online (Sandbox Code Playgroud)
此外,我们假设没有任何指令对其(2)有任何影响,nonVolatileField反之亦然.
读取指令是否(3)可以以锁定语句之前(1)或其内部结束的方式重新排序(2)?
据我所知,C#规范(§3.10)和CLI规范(§I.12.6.5)中没有任何内容禁止此类重新排序.
请注意,这与此问题不同.在这里,我特别询问阅读说明,因为据我所知,它们不被认为是副作用,并且有较弱的保证.
我正在尝试将视频和音频数据流式传输到Windows 上的两个独立命名管道中。
ffmpeg.exe -f dshow -i video="My camera name":audio="My microphone name" -map 0:1 -ac 1 -f f32le \\.\pipe\audioStream -map 0:0 -f mjpeg \\.\pipe\videoStream
Run Code Online (Sandbox Code Playgroud)
问题是 FFMPEG 似乎不理解输出\\.\pipe\audioStream和\\.\pipe\videoStream管道并将它们视为文件。
据我所知,指定pipe:协议应该可以解决问题,但我无法弄清楚如何正确使用它,即使使用单个管道也是如此。我试过了:
pipe:pipeNamepipe:pipe\pipeNamepipe:\\.\pipe\pipeNamepipe://pipeNamepipe://pipe\pipeNamepipe://\\.\pipe\pipeName我总是得到相同的结果:输出被写入控制台而不是管道。如果管道在 FFMPEG 启动时已经存在,则没有任何连接到管道。
是否可以在 Windows 上将 FFMPEG 与命名管道一起使用?如果是,那么执行此操作的正确方法是什么?
我一直在寻找C#中可等待的等效锁语句。有人建议通过SemaphoreSlim以下方式使用二进制文件:
await semaphore.WaitAsync().ConfigureAwait(false);
try
{
//inner instructions
}
finally
{
semaphore.Release();
}
Run Code Online (Sandbox Code Playgroud)
我知道它存在一些问题(例如,它不是可重入的),但是我最大的担心是指令的重新排序。
在普通的旧锁语句中,我们保证不会将锁的内部指令移到锁语句之前(或之后)。这种信号量解决方案是否同样适用?据我所知,文档中没有提到此问题。
我在Common Lisp(CLISP)中实现了一个进化算法,我遇到了一个问题.
我有一个树状的课:
(defclass node ()
((item :initarg :item :initform nil :accessor item)
(children :initarg :children :initform nil :accessor children)
(number-of-descendants :initarg :descs :initform nil :accessor descs)))
Run Code Online (Sandbox Code Playgroud)
还有一些方法:
(defmethod copy-node ((n node))
(make-instance
'node
:item (item n)
:descs (descs n)
:children (mapcar #'copy-node (children n))))
(defmethod get-subtree ((n node) nr)
(gsth (children n) nr))
(defmethod (setf get-subtree) ((val node) (n node) nr)
(setf (gsth (children n) nr) val))
(defmethod get-random-subtree ((n node))
(gsth (children n) (random (descs n))))
(defmethod (setf …Run Code Online (Sandbox Code Playgroud) 我有一个等待的对象不是Task(例如,IObservable<T>安装了RX).我想创建一个Task,如果提供CancellationToken被取消将最终取消,否则返回等待对象的结果.我想出了以下代码:
public static Task ObserveTokenAsync(CancellationToken token)
{
TaskCompletionSource<Unit> tcs = new TaskCompletionSource<Unit>();
token.Register(() => tcs.SetCanceled());
return tcs.Task;
}
public static async Task<T> WrapObservableAsync<T>(IObservable<T> obs)
{
return await obs;
}
public static async Task<T> AwaitWhileObservingTokenAsync<T>(IObservable<T> obs, CancellationToken token)
{
var obsTask = WrapObservableAsync(obs);
var tokenTask = ObserveTokenAsync(token);
await Task.WhenAny(obsTask, tokenTask).ConfigureAwait(false);
token.ThrowIfCancellationRequested();
return obsTask.Result;
}
Run Code Online (Sandbox Code Playgroud)
使用这种方法,我将需要为我将使用的每个等待类型重载/重写最后两种方法.有没有更好的方法来做到这一点?我的猜测是INotifyCompletion界面可能在某种程度上有用.
此外,ObserveTokenAsync如果提供的令牌不会被取消,该方法是否会导致某种资源/内存泄漏?如果是,将在TaskCompletionSource方法结束时设置为完成AwaitWhileObservingTokenAsync将是一个很好的方法来解决它?
c# asynchronous task-parallel-library system.reactive async-await
我正在尝试实现以下方案:
interval通过调用GetInterval()方法计算An .DoSomething()立即调用该方法.DoSomething()每interval毫秒重复调用该方法,直到释放按钮.它可以实现如下:
Timer timer = new Timer();
timer.Tick += DoSomething();
//keyDown and keyUp are IObservables created from the button's events
keyDown.Do(_ =>
{
timer.Interval = GetInterval();
timer.Start();
DoSomething();
});
keyUp.Do(_ =>
{
timer.Stop();
});
Run Code Online (Sandbox Code Playgroud)
我知道这段代码有一些问题,但没关系.我想要实现的是使用纯Reactive Extensions实现这个场景,没有任何外部定时器和副作用(除了调用DoSomething()方法).
我知道Observable.Timer,但我不知道如何在这种情况下使用它.
编辑:我可以创建一个IObservable<int>包含当前值的interval.它可能会有所帮助.
我是C++ CLI的新手,我仍然没有得到新的指针和句柄.
我有一个打开窗口的本机函数.它需要一个父窗口的句柄:
void open(void* parentHwnd);
Run Code Online (Sandbox Code Playgroud)
我应该如何将托管代码中的父窗口传递给此函数?我试图做这样的事情:
void managedOpen(Object^ parent)
{
interior_ptr<void> ptr = &*parent);
open(ptr);
}
Run Code Online (Sandbox Code Playgroud)
但是&运算符"不能用于获取具有ref类类型的对象的地址".
我也应该用pin_ptr而不是interior_ptr?
c# ×4
.net ×2
clr ×2
locking ×2
async-await ×1
asynchronous ×1
c++-cli ×1
common-lisp ×1
ffmpeg ×1
interprocess ×1
java ×1
lisp ×1
maven ×1
named-pipes ×1
semaphore ×1
setf ×1
timer ×1
tree ×1
windows ×1