workthread message loop