小编tea*_*sus的帖子

如何在IntelliJ中更改Maven的Java版本?

我是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.

java intellij-idea maven

76
推荐指数
4
解决办法
4万
查看次数

在锁定之前移动无关锁定语句之后的读取指令吗?

这个问题是这个帖子中评论的后续内容.

我们假设我们有以下代码:

// (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)中没有任何内容禁止此类重新排序.

请注意,这与问题不同.在这里,我特别询问阅读说明,因为据我所知,它们不被认为是副作用,并且有较弱的保证.

.net c# clr multithreading locking

6
推荐指数
1
解决办法
162
查看次数

将 FFMPEG 的输出重定向到 Windows 上的多个命名管道

我正在尝试将视频和音频数据流式传输到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管道并将它们视为文件。

  1. 如果管道在 FFMPEG 启动时已经创建,它想覆盖它们并失败。
  2. 否则,它会抱怨路径不存在并失败。

据我所知,指定pipe:协议应该可以解决问题,但我无法弄清楚如何正确使用它,即使使用单个管道也是如此。我试过了:

  1. pipe:pipeName
  2. pipe:pipe\pipeName
  3. pipe:\\.\pipe\pipeName
  4. pipe://pipeName
  5. pipe://pipe\pipeName
  6. pipe://\\.\pipe\pipeName

我总是得到相同的结果:输出被写入控制台而不是管道。如果管道在 FFMPEG 启动时已经存在,则没有任何连接到管道。

是否可以在 Windows 上将 FFMPEG 与命名管道一起使用?如果是,那么执行此操作的正确方法是什么?

windows ffmpeg named-pipes interprocess

5
推荐指数
1
解决办法
1575
查看次数

信号量是否阻止指令重新排序?

我一直在寻找C#中可等待的等效锁语句。有人建议通过SemaphoreSlim以下方式使用二进制文件:

await semaphore.WaitAsync().ConfigureAwait(false);
try
{
    //inner instructions
}
finally
{
    semaphore.Release();
}
Run Code Online (Sandbox Code Playgroud)

我知道它存在一些问题(例如,它不是可重入的),但是我最大的担心是指令的重新排序。

在普通的旧锁语句中,我们保证不会将锁的内部指令移到锁语句之前(或之后)。这种信号量解决方案是否同样适用?据我所知,文档中没有提到此问题。

.net c# multithreading semaphore locking

5
推荐指数
1
解决办法
478
查看次数

Setf(?)导致树中的循环

我在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)

lisp tree common-lisp setf

3
推荐指数
1
解决办法
176
查看次数

如何在观察CancellationToken的同时等待一个等待对象?

我有一个等待的对象不是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

3
推荐指数
1
解决办法
577
查看次数

如何使用Reactive Extensions(C#)控制计时器而没有任何副作用?

我正在尝试实现以下方案:

  1. 按下按钮.
  2. interval通过调用GetInterval()方法计算An .
  3. DoSomething()立即调用该方法.
  4. DoSomething()interval毫秒重复调用该方法,直到释放按钮.
  5. 再次按下该按钮时,转到2.

它可以实现如下:

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# timer system.reactive

3
推荐指数
2
解决办法
363
查看次数

如何在C++ CLI中将Object ^传递给本机函数

我是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

clr c++-cli

0
推荐指数
1
解决办法
1079
查看次数