1.
---------------------------
/// <summary> /// 用来判断是否停止线程的变量 /// </summary> private volatile bool m_stopThread=false; private Thread m_threadStartSendMusic;
/// <summary> /// 开始发送 /// </summary> public void SendMusicInThread(int startcount,int sendcount,string sbip) { //若有在发送数据 停止发送 m_stopThread = true; Thread.Sleep(106); m_StartCount = startcount; m_SendCount = sendcount; m_sbip = sbip; //新开一个线程发送数据 m_threadStartSendMusic = new Thread(SendMusic); m_threadStartSendMusic.IsBackground = true; m_threadStartSendMusic.Start(); }
/// <summary> /// 发送音乐 /// </summary> private void SendMusic() { m_stopThread = false; int endCount = m_StartCount + m_SendCount; for (int i = m_StartCount; i < endCount; i++) { if (m_stopThread) { break; }
//do something }
}
----------------------------------------------------------------------------------------------
2.
/// <summary> /// 用来判断是否停止线程的变量 /// </summary> private volatile bool m_stopThread=false; private Thread m_threadStartSendMusic;
/// <summary> /// 开始发送 /// </summary> public void SendMusicInThread(int startcount,int sendcount,string sbip) { //若有在发送数据 停止发送 m_stopThread = true; Thread.Sleep(106); m_stopThread = false; m_StartCount = startcount; m_SendCount = sendcount; m_sbip = sbip; //新开一个线程发送数据 m_threadStartSendMusic = new Thread(SendMusic); m_threadStartSendMusic.IsBackground = true; m_threadStartSendMusic.Start(); }
/// <summary> /// 发送音乐 /// </summary> private void SendMusic() { int endCount = m_StartCount + m_SendCount; for (int i = m_StartCount; i < endCount; i++) { if (m_stopThread) { break; }
//do something }
}
-------------------------------------------------------------------------------------------------
当我多次执行SendMusicInThread(。。。)方法时 为何1不能停止当前线程 然后再开线程m_threadStartSendMusic
2却能把上一个线程停掉 然后再开一个线程
就 m_stopThread 放的位置不同
而m_stopThread 我设置的是volatile 应该每次执行去判断m_stopThread的时候都是最新的值才对 为什么呢
- 2 回答
- 0 关注
- 356 浏览
添加回答
举报
0/150
提交
取消