don't use BaseThread