当主线程仍在运行时,子线程可以通过以下几种方式通知主线程:
- 回调函数:子线程可以在完成任务后调用主线程提供的回调函数来通知主线程。主线程在创建子线程时,可以将一个回调函数作为参数传递给子线程。子线程在完成任务后,调用该回调函数即可通知主线程。
- 事件机制:主线程可以创建一个事件对象,并将其传递给子线程。子线程在完成任务后,通过触发该事件来通知主线程。主线程可以通过等待该事件的触发来阻塞自己,直到子线程通知主线程为止。
- 线程间共享变量:主线程和子线程可以共享一个变量,子线程在完成任务后修改该变量的值,主线程通过不断地检查该变量的值来判断子线程是否完成任务。当子线程修改变量的值后,主线程得知子线程已完成任务。
- 消息队列:主线程和子线程可以共享一个消息队列,子线程在完成任务后将通知消息放入消息队列中,主线程通过不断地检查消息队列来获取子线程的通知消息。
需要注意的是,以上方式都需要主线程主动去检查子线程的通知,因为主线程和子线程是并发执行的,主线程无法主动感知子线程的状态变化。因此,在使用以上方式时,需要合理地设计通信机制,确保主线程能够及时获取到子线程的通知。