c map巢狀佇列 佇列巢狀結構體指標 ok

2021-08-15 18:49:21 字數 4795 閱讀 9016

map中巢狀佇列,佇列中是結構體,有乙個問題,結構體中的值不更新

#include

#include

#include

//#include

using

namespace

std;

struct

revdata

recv_data;

map<

string

, queue

<

revdata

>> amap;

handle

hmutex;

dword

winapi

fun1(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}dword

winapi

fun2(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}else}}

呼叫**:

allocconsole();

freopen(

"conout$"

, "w"

, stdout

);hmutex =

createmutex

(null

, false

, _t

("screen"

));queue

<

revdata

> queue1;

char

* aaa =

"abcde"

;amap

[aaa]=

queue1;

handle

handle1 = createthread(

null

, 0, fun1,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle1);

//釋放執行緒

handle

handle2 = createthread(

null

, 0, fun2,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle2);

//釋放執行緒

<

revdata

> queue1 = amap

[aaa];

這句**中,queue1並不是map中的佇列,而是map中佇列的拷貝,所以pop也不是map中佇列的pop,

如果不用指標,解決方法是再設定一下,**如下:

dword

winapi

fun2(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}else}}

佇列裡面是指標:

#include

#include

#include

//#include

using

namespace

std;

struct

revdata

recv_data;

map<

string

, queue

<

revdata

*>> amap;

handle

hmutex;

dword

winapi

fun1(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}dword

winapi

fun2(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}else}}

allocconsole();

freopen(

"conout$"

, "w"

, stdout

);hmutex =

createmutex

(null

, false

, _t

("screen"

));queue

<

revdata

*> queue1;

char

* aaa =

"abcde"

;amap

[aaa]=

queue1;

handle

handle1 = createthread(

null

, 0, fun1,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle1);

//釋放執行緒

handle

handle2 = createthread(

null

, 0, fun2,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle2);

//釋放執行緒

下面是失敗的,map中放佇列指標,佇列指標中放結構體指標

#include

#include

#include

#include

#include

//#include

using

namespace

std;

struct

revdata

recv_data;

map<

string

, queue

<

revdata

*>*> amap;

handle

hmutex;

dword

winapi

fun1(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}dword

winapi

fun2(

lpvoid

)//建立多執行緒函式,函式返回值為dword winapi,一定要是這個,否則會出錯

}else

sleep(50);

releasemutex(hmutex);

//釋放資源獨佔函式}}

呼叫**:

hmutex =

createmutex

(null

, false

, _t

("screen"

));queue

<

revdata

*> queue1;

queue

<

revdata

*>* queue2;

for(

inti = 0; i < 10; i++)

//queuequeue1;

char

* aaa =

"abcde"

;queue2 = (

queue

<

revdata

*>*)malloc(

sizeof

(queue

<

revdata

*>));

memcpy(queue2, &queue1,

sizeof

(queue

<

revdata

*>));

amap

[aaa

]= queue2;

handle

handle1 = createthread(

null

, 0, fun1,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle1);

//釋放執行緒

handle

handle2 = createthread(

null

, 0, fun2,

null

, 0,

null

);//建立多執行緒

//hmutex = createmutex(null, false, "screen");//建立資源獨佔函式createmutex,該函式的功能是獨佔乙個資源或者執行緒

closehandle(handle2);

//釋放執行緒

巢狀結構體案例

這個案例還是有很多地方可以學習的,決定記錄一下 參考 黑馬程式設計師匠心之作 c 教程從0到1入門程式設計 include include include include using namespace std 定義結構體 struct student struct teacher 賦值函式 voi...

結構體巢狀結構體名

結構體巢狀結構體名 前一段時間在看ddk中例子的時候,看到這樣的的結構體定義 typedef struct common device data common device data,pcommon device data typedef struct pdo device data pdo dev...

結構體中巢狀結構體

結構體的巢狀問題 結構體的自引用 self reference 就是在結構體內部,包含指向自身型別結構體的指標。結構體的相互引用 mutual reference 就是說在多個結構體中,都包含指向其他結構體的指標。1.1不使用typedef時 錯誤的方式 struct tag 1 這種宣告是錯誤的,...