change accessor from private -> protected
add throwing exception if create thread failure
add return value of StartMainLoop