检查邮箱是否为空?在二郎

dam*_*ned 7 erlang

我需要做一个检查,它返回true或false,具体取决于当前进程是否在erlang的邮箱中有任何消息.

rvi*_*ing 12

您可以使用process_info/2BIF访问进程信息,包括消息队列.所以

process_info(self(), message_queue_len) => {message_queue_len,Length}
Run Code Online (Sandbox Code Playgroud)

process_info(self(), messages) => {messages,MessageList}
Run Code Online (Sandbox Code Playgroud)

如果队列中有很多消息,那么第二个是低效的,因为为每个调用创建了列表(当然不是消息).关于流程,您可以找到许多有趣的事情.您可以获取信息的流程没有限制,您可以为任何流程执行此操作.