03 多線程編程的注意事項

processing 內置了一個線程函數 thread();

按照博主的個人理解 ,基本說明如下:

類似於一般的processing程序,其遵循特定的一系列步驟:SETUP(),然後在一個循環中一遍又一遍地draw()。

線程也是一系列的開始、中間和結束的步驟。一個處理草圖是一個單線程,通常被稱爲“動畫”線程。然而,其他線程的序列可以獨立於主動畫循環運行。事實上,一次可以啓動任意數量的線程,它們將同時運行。            

使用THEAD()加載文件或執行需要花費時間的其他任務。完成任務後,設置一個指示任務完成的變量,並從內部的DRAW()方法中檢查該變量。              

但是最重要的就是要注意,線程類似於單片機中的中斷程序,不過它一直在跑,那麼在此你不能調用processing 的draw相關的處理函數 ,即繪畫,因爲它獨立運行,所以代碼不會與動畫線程同步,一旦調用,會導致奇怪或者崩潰的結果,這個問題博主不知道有什麼解決辦法。

附上一個測試程序:

import java.text.*;
String time = "";

void setup() {
  //size(100, 100);
  int i = 0;
  thread("requestData");
}

void draw() {

  {print("");}
}

// This happens as a separate thread and can take as long as it wants
void requestData() {
 
  while(true)
  {
   GetCurrent1ms();
  }

}
void requestData1() {
 
  while(true)
  {

     print("thread1");

  }

}

long GetCurrent1ms()   //得到計時器
{    
    long between = 0;
      SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      try {
        java.util.Date begin = dfs.parse("2018-07-26 00:00:00.000");
        long end = System.currentTimeMillis();
        between = (end - begin.getTime());
        //between = end;
      } catch (Exception ex) {
        ex.printStackTrace();
      }
      print(between);
      return (between);
}

需要使用就在主程序中查詢線程變量即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章