2016-04-04 16 views
-1

C++'da uyandırma seçim çağrısına çözüm arıyorum. Uygulama gereksinimine göre, sistem çağrısı kullanarak birden çok iş parçacığı nedeniyle zaman aşımı ayarlanamıyorum.Nasıl uyandırılır Başka bir iş parçacığından zaman aşımı süresi olmadan çağrı seç

Lütfen aşağıdaki senaryoya bakınız.

Uyandırma yapmak istiyorum diğer iş parçacığı üzerinde bekleyen sistem çağrısını seçin. Konuya ana iş parçacığından veri yazmayı denedim, ancak yine de onu uyandıramıyor.

Bu iş parçacığında boş veri varsa, iş parçacığı ve soketi kapatmak istiyorum.

Soket bağlantısı diğer işlemlerden yakınsa, ancak iş parçacığı ile çalışmıyorsa, bir çağrıyı uyandırır.

herhangi biri genel olarak her konuda, eventfd kullanabileceği bir son Linux'ta bu

+0

TCP'de boş veri diye bir şey yoktur. UDP'de boş datagramlar var ama bahsettiğiniz şey bu kadar olası değil. Ne sorduğunu netleştir. – EJP

+0

Kendi kendine yönlendirme numaranızı http://stackoverflow.com/a/384397/2807083 – user2807083

+3

kullanabilirsiniz. Ayrıca bir sinyal (3) ile de kesebilirsiniz. – arrowd

cevap

-1

Değerli öneriniz için teşekkürler, bu link numaralı başvuruda bulunan yanıtı kullanarak shutdown() numaralı çağrı FD soketi ile sorunu çözebiliyorum, eylem için bekleyen uyandırma sinyalini iletecek. Soketi sadece seçimden sonra kapatmalıyız, aksi halde uyandırma sinyalini alamam.

2

ilgili fikri var mı - bir boru, kullanım - (fiili soket ile birlikte okunabilmesi için seçicideki borunun bir tarafını kayıt ler), bir seçici uyandırmak için - sadece borunun diğer ucuna bir byte yazın. Alternatif olarak (libc'iniz varsa) ALRM sinyalini yakalamak için bir sigmask ile pselect'u kullanabilir ve bu sinyali yükseltmek için her zaman bu sinyali yükseltin. Çok iş parçacıklı bir uygulamada ("Kullanmayacağım") sinyal yaklaşımını kullanmamaya çok dikkat edin, doğru yapılmadığı gibi bir işaret rastgele bir iş parçacığına iletilebilir.

İlgili konular