<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def join_all(joinables, timeout):
 """Wait on a list of objects that can be joined with a total timeout represented by ``timeout``. Parameters: joinables(object):
 Objects with a join method. timeout(int):
 The total timeout in milliseconds. """

    started, elapsed = current_millis(), 0
    for ob in joinables:
        ob.join(timeout=timeout / 1000)
        elapsed = current_millis() - started
        timeout = max(0, timeout - elapsed)