[問題] class中的void *function

看板C_and_CPP作者 (Xen)時間13年前 (2011/02/04 12:59), 編輯推噓8(8028)
留言36則, 10人參與, 最新討論串1/1
以前使用pthread呼叫function很簡單 只要宣告void *function(void *ptr); 然後直接pthread_create(&t, NULL, function, NULL);就好 可是現在我是在一個class中產生thread 而這個function要對class中private的資料存取 另外寫一堆public的setData很麻煩 想說直接讓*function寫在class裡面直接存取private比較方便 但是我用Klass::*function或是*Klass::function寫似乎都不行 請問要怎樣寫才正確呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.180.55

02/04 13:07, , 1F
寫程式本來就很麻煩....怕麻煩就什麼都寫不出來
02/04 13:07, 1F

02/04 13:15, , 2F
我知道寫程式很麻煩 但這thread本就該是class的成員
02/04 13:15, 2F

02/04 13:15, , 3F
所以有辦法解決嗎 謝謝您寶貴的意見
02/04 13:15, 3F
※ 編輯: fasthall 來自: 125.224.180.55 (02/04 13:17)

02/04 13:22, , 4F
void *function(class *ptr);這樣可以嗎
02/04 13:22, 4F

02/04 13:27, , 5F
不行耶......這樣還是class外的function......
02/04 13:27, 5F

02/04 13:33, , 6F
ptr->classMethod(); <<寫在Function裡,這樣也不行??
02/04 13:33, 6F

02/04 13:36, , 7F
怎麼那麼麻煩,怎麼寫都不行XD
02/04 13:36, 7F

02/04 13:46, , 8F
你這 thread function 有宣告成 static 的嗎 ? XDXD
02/04 13:46, 8F

02/04 13:49, , 9F
呃......我是覺得把內部東西設成static很不健康......
02/04 13:49, 9F

02/04 14:09, , 10F
memfun 都有一個 this 參數, 你不宣告成 static 會有問題
02/04 14:09, 10F

02/04 16:50, , 11F
還是不太懂怎麼弄......懇請賜教@@
02/04 16:50, 11F

02/04 17:03, , 12F
一個__stdcall member function 執行真正的CALLBACK
02/04 17:03, 12F

02/04 17:04, , 13F
建立執行緒時 傳入__stdcall member pointer 並將this當參
02/04 17:04, 13F

02/04 17:04, , 14F
數傳入
02/04 17:04, 14F

02/04 17:37, , 15F
要傳入thread的成員函數加static
02/04 17:37, 15F

02/04 19:28, , 16F
現在thread沒問題了 不過我的class繼承自Qt的QWidget
02/04 19:28, 16F

02/04 19:29, , 17F
我現在static thread function要呼叫this->repaint();
02/04 19:29, 17F

02/04 19:29, , 18F
這樣要如何寫呢? 不好意思繼承的部份也不熟......
02/04 19:29, 18F

02/04 19:35, , 19F
把this當作其中一個參數傳入
02/04 19:35, 19F

02/04 19:41, , 20F
QPixmap: It is not safe to use pixmaps outside the GU
02/04 19:41, 20F

02/04 19:42, , 21F
I thread 然後就Segmentation fault了嗚嗚 好像是API限制
02/04 19:42, 21F

02/04 20:45, , 22F
在你的thread Send 個 paint message 給 那個 window
02/04 20:45, 22F

02/04 20:45, , 23F
那他就會在 gui thread 做 repaint 啦 ~
02/04 20:45, 23F

02/04 20:46, , 24F
不過我沒寫過 Qt =.= 以上是 windows programming 想法 XD
02/04 20:46, 24F

02/04 21:36, , 25F
用 bind 試試看
02/04 21:36, 25F

02/05 12:15, , 26F
應是執行緒的問題, 為何不用QRunnable你要自己搞呢
02/05 12:15, 26F

02/05 13:18, , 27F
用 boost::bind
02/05 13:18, 27F

02/05 13:23, , 28F
因為到時候要移植到版子上 想盡量用非qt庫......
02/05 13:23, 28F

02/05 14:13, , 29F
原PO的要求真麻煩啊,這樣寫也不行,那樣寫也不行
02/05 14:13, 29F

02/05 19:52, , 30F
這樣的要求很奇怪 ... 都己經用了 QtGui 模組了
02/05 19:52, 30F

02/05 19:52, , 31F
還要想辦法拿掉 QtCore 的相依 ... 完全是不必要的努力
02/05 19:52, 31F

02/05 19:54, , 32F
另外 GUI 物件不能在其他的 thread 產生
02/05 19:54, 32F

02/05 19:54, , 33F
你必須想辦法用 signal/slot 達成
02/05 19:54, 33F

02/05 21:38, , 34F
對不起嘛= ="
02/05 21:38, 34F

02/05 21:39, , 35F
用qtgui是因為到時候gui要重寫 而單獨看gui的話qt最簡單
02/05 21:39, 35F

02/05 21:42, , 36F
大部分gui程式都會有同樣的限制 用信號是必須的
02/05 21:42, 36F
文章代碼(AID): #1DIuUsm2 (C_and_CPP)