2017-01-30 99 views
1

首先,我還在學習C++,因爲我需要修改一個程序來添加一些功能。在這個程序中,我有一個全局狀態變量,它是一個結構體。這是想法/代碼:作爲全球範圍內的結構變量 - 如何定義?

struct { 
    int counter; 
    int x; 
    int y; 
} MyStruct; 

這在主程序的「.H」和這個‘變量’(MYSTRUCT)定義被稱爲了很多函數來獲取狀態和其它信息。 問題是我需要將這些信息發送給一個線程。我正在嘗試創建一個線程(使用pthread_create)並將此「變量」作爲指向pthread_create函數的指針傳遞。這工作很好。問題是當我嘗試在我的線程函數中訪問此結構的任何屬性時。我不能爲我的局部變量綁定這個結構體,因爲這個結構體沒有定義名稱!有可能訪問沒有結構名稱的屬性?我真的試圖避免改變這個結構(甚至爲它添加一個名稱)。

我的並行線程創建(正常工作):

pthread_create(&proc_local_table_thread, NULL, procLocal, &MyStruct); 

而我的線程函數(不工作):

void *procLocal(void *arg) { 
    int *a = arg.x; 
    // This doesn't work too 
    //int *a = (struct Modes)arg.x; 
    // Code... 
} 
+4

C或C++?它們不一樣,特別是在處理「空白」指針時。 –

+4

[不起作用](http://importblogkit.com/2015/07/does-not-work/)不是一個好問題描述。 –

+1

不要發送垃圾郵件標籤! – Olaf

回答

0

您可以使用decltype(C++以上11)

void *procLocal(void *arg) { 
    auto pMyStruct = static_cast<decltype(MyStruct)*>(arg); 

    int *a = &(pMyStruct->x); 
} 

在C++ 11之前,我想你沒有別的選擇來使用mch所說的(即http://ideone.com/KovP7x