2010-08-02 84 views

回答

2

是的,你可以。

zend_fetch_resource將不起作用,因爲它接收可接受的資源類型,如果找到的資源不是其中之一,則會失敗。

只需使用

void *zend_list_find(int id, int *type); 

從資源的zval可以用Z_RESVAL(zval)提取ID。參數type將填充找到的資源的類型。

但是,我沒有看到這方面的太多用法,除了可能創建一個var_dump克隆。問題是,一旦你檢索了一個任意的資源,你將如何處理它?......通常,你對返回的數據結構一無所知。

,您可以直接獲取資源的名稱:

char *zend_rsrc_list_get_rsrc_type(int resource TSRMLS_DC); 
+0

哦,謝謝。我需要的是我正在完成PECL線程擴展(用於CLI),因爲我想創建一個服務器。但對於服務器,我需要能夠在兩個線程之間傳遞資源,並且我不能將zval從一個線程複製到另一個線程,對不對?所以我認爲我可以將資源存入真正的全局資源中,並且在請求時只需使用相同的資源指針(void *)註冊新的zval資源。 – innocenat 2010-08-02 08:54:04

+0

@Nat這是行不通的。資源列表是一個線程局部變量。請參閱http://en.wikipedia.org/wiki/Inter-process_communication – Artefacto 2010-08-02 09:02:55

+0

我要做的是在源線程中獲取資源,將資源(以void *形式)存儲在真正的全局資源中(而不是zend的TSRM ),並放回到目標線程的zval中。這應該可以,呃? IPC是不可能的,因爲資源是不可序列化的,是嗎? – innocenat 2010-08-02 09:25:17