Citace od: Onestone kdy 19. 04. 2017, 15:15:01Struktura kódu je takováto:Kód [Vybrat] Rozbalitint main() { __block int c = 0; printf("%p\n", &c); dispatch_async(...); printf("%p\n", &c); ...}Ty dva printfy vypisují různé adresy. Potřebuju předat jiné asynchonní knihovně ukazatel na ten čítač jako parametr (void*), proto to řeším, ale nevím, jak to udělat bezpečně, aby ten ukazatel zůstal platný. Funkce main nakonec končí ve smyčce událostí, takže proměnné na zásobníku zůstávají platné.
int main() { __block int c = 0; printf("%p\n", &c); dispatch_async(...); printf("%p\n", &c); ...}
Citace od: Onestone kdy 19. 04. 2017, 15:15:01Citace od: Danek kdy 19. 04. 2017, 14:47:22Citace od: Onestone kdy 19. 04. 2017, 13:26:54Zdravím, potřeboval bych vysvětlit jednu podivnost. Na Linuxu používám libdispatch v kódu v C, vytvořím si čítač (int counter) a ten pak používám v blocích, které dávám do fronty. Na hlavním vlákně si chci občas přečíst hodnotu, mám tam ukazatel na counter, ale program při čtení *counter spadne. Evidentně to nějak souvisí s těmi bloky, když je fronta prázdná, kód běží. Má s touto knihovnou někdo zkušenosti?Asi by tochtelo nekam hodit ten kod, nebo aspon ukazku. Co presne je mysleno tim lokalni promenna? Pokud je tim mysleno opravdu lokalni promenna tak na tu nedava smysl delat ukazatel a ten pouzivat nekde mimo, jelikoz to kam ten pointer ukazuje uz nemusi existovatStruktura kódu je takováto:Kód [Vybrat] Rozbalitint main() { __block int c = 0; printf("%p\n", &c); dispatch_async(...); printf("%p\n", &c); ...}Ty dva printfy vypisují různé adresy. Potřebuju předat jiné asynchonní knihovně ukazatel na ten čítač jako parametr (void*), proto to řeším, ale nevím, jak to udělat bezpečně, aby ten ukazatel zůstal platný. Funkce main nakonec končí ve smyčce událostí, takže proměnné na zásobníku zůstávají platné.
Citace od: Danek kdy 19. 04. 2017, 14:47:22Citace od: Onestone kdy 19. 04. 2017, 13:26:54Zdravím, potřeboval bych vysvětlit jednu podivnost. Na Linuxu používám libdispatch v kódu v C, vytvořím si čítač (int counter) a ten pak používám v blocích, které dávám do fronty. Na hlavním vlákně si chci občas přečíst hodnotu, mám tam ukazatel na counter, ale program při čtení *counter spadne. Evidentně to nějak souvisí s těmi bloky, když je fronta prázdná, kód běží. Má s touto knihovnou někdo zkušenosti?Asi by tochtelo nekam hodit ten kod, nebo aspon ukazku. Co presne je mysleno tim lokalni promenna? Pokud je tim mysleno opravdu lokalni promenna tak na tu nedava smysl delat ukazatel a ten pouzivat nekde mimo, jelikoz to kam ten pointer ukazuje uz nemusi existovat
Citace od: Onestone kdy 19. 04. 2017, 13:26:54Zdravím, potřeboval bych vysvětlit jednu podivnost. Na Linuxu používám libdispatch v kódu v C, vytvořím si čítač (int counter) a ten pak používám v blocích, které dávám do fronty. Na hlavním vlákně si chci občas přečíst hodnotu, mám tam ukazatel na counter, ale program při čtení *counter spadne. Evidentně to nějak souvisí s těmi bloky, když je fronta prázdná, kód běží. Má s touto knihovnou někdo zkušenosti?
Citace od: v kdy 19. 04. 2017, 16:18:14určitě je to lokální proměnná? https://en.wikipedia.org/wiki/Blocks_(C_language_extension)