Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 20

0
votes
answers
59 views
+10

如何確定從另一個線程創建哪個線程?

1

.NET中是否有任何方法來確定其「父」,即創建它的線程?如何確定從另一個線程創建哪個線程?

我在診斷黑盒第三方API的時間問題,並想了解它在哪個線程上執行的自定義代碼。

沙发
0
0

Kindof 如果您使用像PostSharp這樣的工具(您必須實現一個方面),您可以確定在哪個線程上調用了Start()方法。

0
votes
answers
41 views
+10

如何啓動一個運行類函數的boost線程?

1

即時做一個C++類在內部,我想創建一個線程來執行類的功能,我該怎麼做?我給你看一些代碼。如何啓動一個運行類函數的boost線程?

成員函數我想在一個線程中運行:

void SocketServer::runServer(){ 
    bool connected; 
    tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), puerto)); 
    std::string data; 

    while(seguirFuncionando()){ 
     miSocket = new tcp::socket(io_service); 
     std::cout << "Waiting for connection...
"; 
     a.accept(*miSocket); 
     std::cout << "Connected
"; 
     connected = true; 
     try{ 
      while (connected){ 
       data = readStr(); 
       if (data.compare("")==0){ 
        std::cout << "End of connection.
"; 
       } 
       else{ 
        std::cout << data << "
"; 
       } 
      } 
     } 
     catch (std::exception& e){ 
     std::cerr << "Exception in thread: " << e.what() << "
"; 
     } 
    } 
} 

什麼我嘗試做:

void SocketServer::runThreadServer(){ 
    asio::thread t(runServer); 
} 

但它不編譯。錯誤:

沒有匹配函數調用'asio :: thread :: thread() 注意:候選是:asio :: thread :: thread(Function)[with Function = void(SocketServer :: *)( )]

我該怎麼做?

Thanx。

+1

你可能想嘗試用[boost.bind(http://www.boost.org/doc/libs/1_48_0/libs/bind/bind.html) – 2012-02-10 17:27:43

+0

@JoachimPileborg你能舉個例子嗎?即時通訊新的提振,而我有點失落:P – Alex 2012-02-10 17:29:25

沙发
0
4

像Joachim Pileborg說的,標準的做法是使用boost::bindboost::bind專門從C++對象及其成員函數構造一個名爲boost::function(可能在boost::thread的c'tor中傳遞)的構造。

事情是這樣的:

boost::thread t(boost::bind(&SocketServer::runServer, this)); 
+0

Thanx,這工作得很好:) Thanx valdo和Joachim。另一件事,我可以在哪裏學習如何提升Threads和Asio?我開發了一個客戶端 - 服務器應用程序,我需要處理得很好,但官方文檔不是很廣泛。我在哪裏可以得到很好的例子? Thanx – Alex 2012-02-10 17:41:30

+0

準確地說,'boost :: bind'不會創建'boost :: function'對象,它會創建* unknown *(無文檔,可以隨時更改)類型的對象,該類型可以分配給'boost ::功能「的適當簽名。 – 2012-02-10 17:45:46

0
votes
answers
22 views
+10

如何在單線程中執行一些Clojure期貨?

0

我想在Clojure中創建一些未來,並在特定的線程上運行它們,以確保它們一次運行一次。這可能嗎?如何在單線程中執行一些Clojure期貨?

將Java庫包裝起來並不難,但在這之前我想確保我不會錯過Clojure的做法。在Java中,我可以通過執行FutureTask並將這些任務提交給單線程執行程序來執行此操作。

+0

你爲什麼要創造出設計用於併發性,不僅是執行,他們執行的非同時構建?也許你以這種方式定義了現有的任務,或者你通常同時執行它們,但是想在有限的時間內強制順序執行?只是好奇。 – Josh

+0

假設有多個線程(例如,服務器中的請求線程)都希望運行使用共享資源X的任務,而共享資源X一次只能由一個線程使用。一種解決方案是在訪問X時獲取鎖。另一種方法是提交任務(期貨)以在與X關聯的單個線程上運行。其他調用線程可能會或可能不會等待未來的結果。 –

+0

當然,但爲什麼在這種情況下創建線程呢?爲什麼不把這些任務作爲一個線程的函數來調用呢? – Josh

沙发
0
1

,如果你想sequentialize到future來電您可以手動使用它像這樣:

(do @(future 1) 
    @(future 2) 
    @(future 3)) 

他們仍然可能被稱爲在不同的線程,但下一個會不會被調用,直到之前已完成。這由@(或deref函數)保證。這意味着執行do表單的線程在完成之前將被prev承諾阻塞,然後產生下一個。

你可以用宏美化這樣的:

(defmacro sequentialize [& futures] 
    `(do [email protected](map #(list `deref %) futures))) 

user> (let [a (atom 1)] 
     (sequentialize 
     (future (swap! a #(* 10 %))) 
     (future (swap! a #(+ 20 %))) 
     (future (swap! a #(- %)))) 
     @a) 
;;=> -30 

這樣做完全一樣的手動do。請注意,突變a原子是有序即使某些線程運行的時間更長:

user> (let [a (atom 1)] 
     (sequentialize 
     (future (Thread/sleep 100) 
       (swap! a #(* 10 %))) 
     (future (Thread/sleep 200) 
       (swap! a #(+ 20 %))) 
     (future (swap! a #(- %)))) 
     @a) 
;;=> -30 
板凳
0
0

Manifold提供一種方式來創造未來with specific executor。它不是核心Clojure庫的一部分,但它仍然是一個高質量的庫,如果你需要更多的靈活性來處理未來,而不是核心lib提供的(而不是採用Java interop),那麼這可能是一個最好的選擇。

地板
0
0

另外提到的promises,您可以使用delay。承諾的問題是您可能無意中無法提供它們,並創建一個死鎖場景,這是future s和delay s不可能實現的。未來和延遲之間的差異只是工作執行的線索。未來,這項工作是在後臺完成的,並且延遲工作是由第一個嘗試解除它的線程完成的。因此,如果未來的是一個比承諾更合適,你總是可以這樣做:

(def result-1 (delay (long-calculation-1))) 
(def result-2 (delay (long-calculation-2))) 
(def result-3 (delay (long-calculation-3))) 

(defn run-calcs [] 
    @(future 
    @result-1 
    @result-2 
    @result-3)) 
0
votes
answers
15 views
+10

什麼是在VueJS應用程序中添加靜態css/js的正確方法

0

我看到了與此相關的多個問題,但我仍不明白添加靜態CSS的正確方法是什麼。 以正確的方式將靜態CSS添加到「靜態」文件夾?什麼是在VueJS應用程序中添加靜態css/js的正確方法

一些我發現在互聯網上的建議都是:

  • 要求在main.js
  • 添加CSS的靜態文件夾中的CSS和使用鏈接標記指向文件的靜態目錄

我想知道哪一個是最正確的。

謝謝。

+0

你可能已經鏈接到你提到的問題,並寫了一個在那裏建議的替代方案列表。 –

+0

我添加了在互聯網@RolandWeber上找到的建議。 – TomasLife

沙发
0
0

如果你使用的是webpack,你可以在你的主js配置文件中導入你的樣式表,並且你的所有組件都將獲得css。像這樣:

require('./assets/css/main.css'); 
+0

我試過你的建議,但我發現它包含