小编and*_*rey的帖子

如何取消Nuke中的执行写入节点(Python)

我一直在用Python写一个Nuke渲染管理器并遇到了一个问题: nuke.cancel()似乎没有正常工作.我的python脚本创建一个主类并连接到服务器(用Java编写),然后进入无限循环,每次都获得一个新任务(以JSON对象的形式).它获得的每个循环打开一个脚本?找到写节点并执行它们.要将进度报告回服务器,我已经添加了回调: nuke.addBeforeFrameRender(lambda: self._pre_frame_render()) 以及 nuke.addAfterFrameRender(lambda: self._post_frame_render()) 在哪里

def _pre_frame_render(self):
    self._host_socket.send(struct.pack('>b', 1))
    self._host_socket.send(struct.pack('>i', nuke.frame()))

def _post_frame_render(self):
    self._host_socket.send(struct.pack('>b', 2))
    self._host_socket.send(struct.pack('>i', nuke.frame()))
Run Code Online (Sandbox Code Playgroud)

cancel在服务器上启用方法,我有一个单独的线程在渲染处于活动状态时运行并等待"取消"请求

class CancelHandler(threading.Thread):
    def __init__(self, input_socket, cancel_callback):
        threading.Thread.__init__(self)
        self.cancel_set = threading.Event()
        self.run_set = threading.Event()
        self._input_socket = input_socket
        self._cancel_callback = cancel_callback

    def run(self):
        while True:
            if self.run_set.is_set():
                msg_raw = recv_msg(self._input_socket)
                msg = json.loads(msg_raw)
                if 'mode' in msg and msg['mode'] == 'cancel':
                    print msg_raw
                    self.cancel_set.set()
                    self.run_set.clear()
                    self._cancel_callback()
Run Code Online (Sandbox Code Playgroud)

cancel_callback被定义为

def _cancel_callback(self):
        nuke.cancel()
        self._is_canceled = True
Run Code Online (Sandbox Code Playgroud)

在循环开始之前,我启动CancelHandler线程,并在每次迭代时 …

python multithreading render nodes nuke

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

const_cast 在常量表达式中是否有效?(C++14, C++17)

a 遇到的具体问题是编译器处理它的方式存在一些不一致。

例如这个代码(https://godbolt.org/z/08Z-zi):

    constexpr auto value = 1;
    static_assert(*const_cast<int *>(&value), "value should be 1");
Run Code Online (Sandbox Code Playgroud)

使用 GCC、Clang 和 MSVC 编译良好,但使用英特尔 C++ 编译器 19.0.1 失败并出现以下错误:

error: expression must have a constant value
static_assert(*const_cast<int *>(&value), "value should be 1");
Run Code Online (Sandbox Code Playgroud)

据我所知,标准没有明确说明const_cast常量表达式中不允许使用 a。通过结果指针写入将是未定义的,因此不允许,但读取应该没问题。

考虑到所有主要编译器都会编译此代码(包括 ICC < 19.0.1),这可能只是 ICC 19.0.1 中的回归。

c++ const-cast language-lawyer constant-expression constexpr

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