Android NDK'ya C++ kodunun orta boyutlu bir gövdesini yerleştiriyorum. Ne yazık ki pthreads uygulaması (yine de NDK v5'ten itibaren) eksik. Özellikle, bizim uygulama bir çalışan iş parçacığı öldürmek için pthread_cancel() dayanmaktadır. NDK pthread_cancel() uygulamıyor! İşçi iş parçacığı normal yanıt verirken başka açık yanıtlar vardır. Ancak, çalışan iş parçacığının yanıt vermediği durumlarda (ör. Sonsuz döngü), tüm süreci öldürmeden nasıl iptal edebilirim?pthread_cancel() alternatifleri?
19
A
cevap
14
bu adamın çalıştığı
Olası seçenek: http://igourd.blogspot.com/2009/05/work-around-on-pthreadcancel-for.html
diye burada yeniden gönderiliyor: Sonra bu pthread çıkmak için bir SIG_USR1 sinyalini tetiklemek ve sinyal işleyici, kullanmak pthread_kill kullanmak ve güvenilir o
, ancak bu tür bir yöntem için dezavantajının olup olmadığını merak ediyor.
Zamanlayıcı dışarı:
if ((status = pthread_kill(pthread_id, SIGUSR1)) != 0)
{
printf("Error cancelling thread %d, error = %d (%s)", pthread_id, status, strerror status));
}
USR1 işleyicisi:
en iyi yanıtı ipler IO bekleyen değildir böylece yeniden yazmak için gibistruct sigaction actions;
memset(&actions, 0, sizeof(actions));
sigemptyset(&actions.sa_mask);
actions.sa_flags = 0;
actions.sa_handler = thread_exit_handler;
rc = sigaction(SIGUSR1,&actions,NULL);
void thread_exit_handler(int sig)
{
printf("this signal is %d \n", sig);
pthread_exit(0);
}
görünüyor: http://groups.google.com/group/android-platform/browse_thread/thread/0aad393da2da65b1
0
I bununla ilgilenen küçük bir kütüphane yaptı. Biyonik iplik yapısının bazı kullanılmayan bitlerini kullanır. o bekler zaman bu iş parçacığı iptali için bir çek eklemek bariz bir yer yani,) dış olaylar için bir semaforda
İlgili konular
- 1. Alternatifleri?
- 2. Inflector.Net Alternatifleri
- 3. WPF Alternatifleri?
- 4. Nabaztag alternatifleri?
- 5. MapReduce alternatifleri
- 6. Alternatifleri SKShapeNode
- 7. Graphviz Alternatifleri?
- 8. SyncAdapter alternatifleri
- 9. Alternatifleri CKAN
- 10. Kibana Alternatifleri
- 11. ViewState alternatifleri ASP.NET Webforms
- 12. Xamarin MVVMCross Alternatifleri
- 13. jQuery UI Alternatifleri Resizable
- 14. DataGridView'ın alternatifleri nelerdir?
- 15. TOAD Alternatifleri (Linux)
- 16. Android SQLite alternatifleri
- 17. Android için CachingHttpClient alternatifleri?
- 18. Better JFileChooser alternatifleri?
- 19. python günlüğe kaydetme alternatifleri
- 20. Kurallar olarak BizTalk Alternatifleri
- 21. ORM alternatifleri nelerdir?
- 22. İş planlaması için Quartz alternatifleri
- 23. Android'de HLS oynamak (alternatifleri karşılaştır)
- 24. Open Source Invisible reCAPTCHA alternatifleri
- 25. CSS: -webkit-touch-callout alternatifleri android için
- 26. Kinect v1 ve Kinect v2 sınıfları alternatifleri
- 27. Windows Phone 7 - Sql Kompakt Alternatifleri?
- 28. Ruby on Rails'de polimorfizmi kullanmanın alternatifleri
- 29. vi komut geçmişine erişirken okları kullanmanın alternatifleri
- 30. İstisna işleme ve raporlama için SmartAssembly alternatifleri?
çalışan iş parçacığı bekler;
Ben libbthread :)Enjoy çağırdı. Bazı sınırlı G/Ç engelleme vardır, ancak iş parçacığının yanıt vermemesinin beklenen nedeni bu değildir. İş parçacığı kapatma sinyallerini kullanmaktan kaçınmayı umuyordum çünkü bu, her bir iş parçacığında, IME'de hack sigmaskları gerektirir. –
Evet, geçerli Android NDK'de olmayan bir utanç, bazı can sıkıcı görevler ekler. Çok platformlu gelişimin sevinçleri. Pthread_cancel veya semaforlarını kullanmak zorunda kalmayacağımızdan, iş parçacığı kütüphanemizi oldukça kolay bir şekilde yükledik, ancak bir çeşit yeniden yazma/arayüz uygulamasının eksiklik nedeniyle değişmesi gerekecek gibi görünüyor. –
Sinyal işleyicide 'pthread_exit()' ifadesi temel olarak asenkron iptalin ne olduğunu gösterir (bkz. 'Pthread_setcanceltype()'). Bu, doğru ve kullanımı zor bir işlemdir. Ertelenmiş iptali, sadece belirli iptal noktalarında iptal ettiği için doğru kullanımı daha kolaydır (yine de büyük çaba olsa da), ancak iş parçacığı kütüphanesi için uygulanması da daha zordur. – jilles