| 
									
										
										
										
											2022-04-20 20:05:56 +08:00
										 |  |  | -define(AWAIT_MATCH_DEFAULT_POLLING_INTERVAL, 50). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -define(awaitMatch(Guard, Expr, Timeout, PollingInterval), | 
					
						
							|  |  |  |         begin | 
					
						
							|  |  |  |             ((fun AwaitMatchFilter(AwaitMatchHorizon) -> | 
					
						
							|  |  |  |                       AwaitMatchResult = Expr, | 
					
						
							|  |  |  |                       case (AwaitMatchResult) of | 
					
						
							|  |  |  |                           Guard -> AwaitMatchResult; | 
					
						
							| 
									
										
										
										
											2024-04-06 00:30:00 +08:00
										 |  |  |                           __V -> case erlang:monotonic_time(millisecond) of | 
					
						
							| 
									
										
										
										
											2022-04-20 20:05:56 +08:00
										 |  |  |                                      AwaitMatchNow when AwaitMatchNow < AwaitMatchHorizon -> | 
					
						
							|  |  |  |                                          timer:sleep( | 
					
						
							|  |  |  |                                            min(PollingInterval, | 
					
						
							|  |  |  |                                                AwaitMatchHorizon - AwaitMatchNow)), | 
					
						
							|  |  |  |                                          AwaitMatchFilter(AwaitMatchHorizon); | 
					
						
							|  |  |  |                                      _ -> | 
					
						
							|  |  |  |                                          erlang:error({awaitMatch, | 
					
						
							|  |  |  |                                                        [{module, ?MODULE}, | 
					
						
							|  |  |  |                                                         {line, ?LINE}, | 
					
						
							|  |  |  |                                                         {expression, (??Expr)}, | 
					
						
							|  |  |  |                                                         {pattern, (??Guard)}, | 
					
						
							| 
									
										
										
										
											2025-09-30 09:14:47 +08:00
										 |  |  |                                                         {value, __V}, | 
					
						
							|  |  |  |                                                         {timeout, Timeout}, | 
					
						
							|  |  |  |                                                         {polling_interval, PollingInterval}]}) | 
					
						
							| 
									
										
										
										
											2022-04-20 20:05:56 +08:00
										 |  |  |                                  end | 
					
						
							|  |  |  |                       end | 
					
						
							| 
									
										
										
										
											2024-04-06 00:30:00 +08:00
										 |  |  |               end)(erlang:monotonic_time(millisecond) + Timeout)) | 
					
						
							| 
									
										
										
										
											2022-04-20 20:05:56 +08:00
										 |  |  |         end). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -define(awaitMatch(Guard, Expr, Timeout), | 
					
						
							| 
									
										
										
										
											2024-03-13 18:41:00 +08:00
										 |  |  |         ?awaitMatch(Guard, Expr, Timeout, ?AWAIT_MATCH_DEFAULT_POLLING_INTERVAL)). |