簡體   English   中英

成員上的多個線程更改不會反映在主線程中

[英]multiple threads changes on a member doesn't reflect in the main thread

我可以在這里征詢一下社區的意見。 我有一個應用程序,其中有多個線程訪問(此)類的成員,該類調用了線程本身。 問題是,當新線程在LinkedList成員中添加元素時,我可以看到由於添加了元素,LinkedList的計數增加到1,但是在主線程中,新線程所做的更改未反映。 我什至將當前對象的引用傳遞給ParameterizedThreadStart,但它仍然無法正常工作。

插圖:

ParameterizedThreadStart^ pReceiveProc = gcnew ParameterizedThreadStart(this, &ActualClass::Receive);
Thread^ pReceiveThread = gcnew Thread(pReceiveProc);
pReceiveThread->Start(this); // passed the current instance

線程方法:

void Receive(Object^ pObj) {
    ActualClass^ l_Cls = dynamic_cast<ActualClass^>(pObj);
    l_Cls->MyLinkList->AddLast("test");
    Console::WriteLine("{0}", l_Cls->MyLinkList->Count); //outputs 1
}

但是如果我從主線程訪問MyLinkList:

void MethodMainThread(){
    Console::WriteLine("{0}", MyLinkList->Count); //outputs 0
}

靜態成員解決方案不是一種選擇。

最有可能的是,您的輔助線程被搶占,您的主線程檢查計數,然后輔助線程添加了一個對象,嘗試使用信號傳輸,然后讓主線程等待,直到輔助線程完成其操作。

不能像這樣那樣在線程之間共享數據。 一種簡單的方法是使用“ lock”語句。 這很簡單, 這是一個很好的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM