在 node.js 中使用 amqp-lib (7) 我在从 RabbitMQ 队列中消费时无法等待异步任务。
例如,
channel.consume(exchange_name, doWork, {
noAck: false
});
function doWork(msg) {
log.info(JSON.parse(msg.content.toString()));
setTimeout(function () {
log.info(" Done");
channel.ack(msg);
}, 2000);
}
Run Code Online (Sandbox Code Playgroud)
这应该,AFAIK 从队列中检索消息,处理它,然后确认该过程已完成并成功。
但是,当我运行它与包含 1000 条消息的队列时,它将抓取所有 1000 条消息并启动该过程。然后 2 秒后,确认一切都已完成。
是否可以等待该过程完成并获得下一个?(在等待另一个进程时,工作人员不应消耗成千上万条消息中的 10 条)。
提前致谢
我一直在尝试创建一个写入数据库的任务,而不会阻塞UI线程。我遇到的最大问题是等待该过程完成而不会发生阻塞。
我一直在尝试避免使用DoEvents(尽管此程序现在经常使用它,但我希望在前进时不再使用它)。
我试图创建要在第二个线程上运行的进程,并等待它完成以及使用BackgroundWorker。
我遇到的问题不是让代码在其他线程中运行,而是试图找到一种方法来等待它完成。
基本上,现在我要执行以下操作:
BackgroundWorker所以我可以使用ReportProgressBackgroundWorkerBackgroundWorker完成。对于线程,我等待IsAlive变为false,对于BackgroundWorker,我切换一个布尔变量。问题出在#4中。
在没有代码的情况下执行while循环,或者Thread.Sleep(0)阻塞UI(Thread.Sleep(0)使程序也占用程序资源的100%)
所以我做:
while (!thread.IsAlive)
Thread.Sleep(1);
Run Code Online (Sandbox Code Playgroud)
-要么-
while (bProcessIsRunning)
Thread.Sleep(1);
Run Code Online (Sandbox Code Playgroud)
这会阻塞用户界面。
如果在此调用Application.DoEvents(),则UI会更新(尽管它是可单击的,所以在此过程运行时,我必须禁用整个表单)。
如果我同步运行该过程,那么我仍然需要创建某种方式来更新UI(在我看来,是一个DoEvents调用),这样它就不会被锁定。
我究竟做错了什么?
首先,我是一名C#程序员,所以我对C++的工作知识相当有限.我在大学时把它拿回来了,但是在10年内没有碰到它,所以如果这是相对简单的东西,请原谅我.
我正在尝试创建一个可以在C#中使用的DLL,它实现了libwpd库.
我已经设法创建了一个DLL,它可以导出我可以通过P/Invoke访问的2个函数.第一个返回一个常量整数(由visual studio作为样本生成),第二个返回一个字符串.
如果我从函数返回一个常量字符串,它会成功传递给C#,我可以在另一端读取它,所以我知道数据正在被传回.
我遇到的问题是libwpd.我不得不修改他们的TextDocumentGenerator.cpp文件,将信息添加到char*而不是使用他们使用的printf,以便我以后可以访问它.
我已经在头文件的公共部分添加了一个变量定义,所以我可以从调用代码中读取它.
现在,我正在尝试编写一个函数,允许我将libwpd给出的char*添加到外部char*.
我想出来了:
char* addString(const char* addThis, char* toThis)
{
char* copier = (char*)malloc(strlen(toThis) + 1 + 1);
strcpy(copier, toThis);
strcpy(copier, "1");
toThis = (char*)malloc(strlen(copier) + 1);
strcpy(toThis, copier);
return copier;
}
Run Code Online (Sandbox Code Playgroud)
但当我传回信息时,我得到一个空白字符串.
我通过调用来调用该函数 totalFile = addString("\n", totalFile);
(我意识到它应该只在技术上反复地向字符串添加"1",但它甚至没有做到)
如果我将strcpy更改为复印机线的strcat,它会锁定.
我不知道如何用C++创建程序,所以我甚至可以通过这些函数来查看正在发生的事情.
任何援助将不胜感激.