簡體   English   中英

使用wxWidgets多線程時的奇怪行為

[英]Strange behavior when multithreading using wxWidgets

我的應用程序中有2個線程-一個UI,第二個正在更新一些數據。 第二個線程的類繼承了wxThread類,並且具有一些變量,尤其是Worker *worker

class Worker {
public:
    virtual void work() {}
};

class WorkerThread : public wxThread {
public:
    bool isRunning = true;
    Worker *worker;

    virtual ExitCode Entry() {
        while (isRunning) {
            if (worker == nullptr) continue;
            worker->work();
            usleep(UPDATE_DELAY_USEC);
        }

        std::cout << "Done\n";

        return 0;
    }
};

如果我將worker的值從第一個線程更改為nullptr ,則應用程序將繼續正常運行。 例如,如果將值更改為new Worker()或與之相同的值,則應用程序將直接退出。 沒有任何錯誤打印到控制台。

我在wxNotebook事件中更改此指針:

void onPageChanged(wxBookCtrlEvent &event) {
    switch (event.GetOldSelection()) {
        case MNP_PROCESSES:
            workerThread->worker = nullptr;
            break;
    }

    switch (event.GetSelection()) {
        case MNP_PROCESSES:
            workerThread->worker = &processes->worker;
            break;
    }
}

整個奇怪的事情是,如果我將Worker *worker帶入全局范圍,那么一切都會正常運行,而不會出現任何錯誤。

Worker *worker;

class WorkerThread : public wxThread {
    ...

是什么原因?

問題解決了。 我一直在尋找沒有問題的問題。 問題是我首先創建了一個wxNotebook ,分別調用了wxNotebookonPageChanged ,其中的指針發生了變化,該指針屬於一個尚未創建的類。

暫無
暫無

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

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