One solution we have applied works like this;
Start the workflow once every hour --
First task checks for a file to process. If there is no file to process, then stop.
Otherwise, run the workflow, and the last step kicks off another instance of the same workflow.