ug二次开发Modeler error:calling KI before the priveious call completes
时间: 2024-02-18 11:03:04 浏览: 72
ug二次开发
这个错误通常出现在 UG NX 二次开发中使用“回调函数”进行异步操作时。具体原因可能是在回调函数中调用了“KI”(Kernel Interface)函数,而前一个 KI 函数尚未完成,导致了这个错误。
解决方案是在回调函数中不要直接调用 KI 函数,而是将需要调用的 KI 函数加入到队列中,等待前一个 KI 函数完成后再执行下一个 KI 函数。以下是一个示例代码:
```c++
// 定义队列
std::queue<std::function<void()>> g_kiQueue;
// 定义互斥锁
std::mutex g_kiMutex;
// 将需要执行的 KI 函数加入队列
void AddToKIQueue(std::function<void()> func)
{
std::lock_guard<std::mutex> lock(g_kiMutex);
g_kiQueue.push(func);
}
// 在主循环中调用,执行队列中的 KI 函数
void ProcessKIQueue()
{
std::lock_guard<std::mutex> lock(g_kiMutex);
while (!g_kiQueue.empty())
{
auto func = g_kiQueue.front();
g_kiQueue.pop();
func();
}
}
// 回调函数示例
void MyCallback(void* userData)
{
// 将需要执行的 KI 函数加入队列
AddToKIQueue([](){
// 调用 KI 函数
UF_CAM_ask_machine_tool_definition(...);
});
}
```
在上面的示例中,我们使用了一个队列和一个互斥锁来实现异步执行 KI 函数。在回调函数中,我们将需要执行的 KI 函数加入到队列中。在主循环中,我们调用 `ProcessKIQueue` 函数来执行队列中的 KI 函数。这样就可以避免在回调函数中直接调用 KI 函数而导致的“KI before the previous call completes”错误。
阅读全文