TCL: اثنين من طريقة الاتصال بين المواضيع في نظام التشغيل Windows

StackOverflow https://stackoverflow.com/questions/267420

  •  06-07-2019
  •  | 
  •  

سؤال

وأحتاج لاثنين من الاتصالات الطريق بين المواضيع في تى سى ال وكل ما يمكنني الحصول على وسيلة واحدة مع المعلمات التي تمر في بلدي كما فقط master-> قناة اتصال المساعد. هنا هو ما قلته:

proc ExecProgram { command } {
    if { [catch {open "| $command" RDWR} fd ] } {
        #
        # Failed, return error indication
        #
        error "$fd"
    }
}

لاستدعاء tclsh83، على سبيل المثال ExecProgram "tclsh83 testCases.tcl TestCase_01"

وضمن الملف testCases.tcl يمكنني استخدامها التي مرت في المعلومات. على سبيل المثال:

set myTestCase [lindex $argv 0] 

وضمن testCases.tcl يمكنني يضع بها إلى أنبوب:

puts "$myTestCase"
flush stdout

وتلقي أن يضع ضمن موضوع الرئيسي باستخدام معرف العملية:

gets $app line

... ضمن حلقة.

والتي ليست جيدة جدا. وليس في اتجاهين.

وأي شخص يعرف من 2 في اتجاه وطريقة التواصل السهل على تى سى ال في نظام التشغيل Windows بين 2 المواضيع؟

هل كانت مفيدة؟

المحلول

وهنا مثال صغير يوضح كيفية عمليتين يمكن الاتصال. أولا عملية طفل (حفظ هذا كما child.tcl):

gets stdin line
puts [string toupper $line]

وثم عملية الأصل أن يبدأ الطفل وcomunicates معها:

set fd [open "| tclsh child.tcl" r+]

puts $fd "This is a test"
flush $fd

gets $fd line
puts $line

والوالد يستخدم القيمة التي تم إرجاعها من قبل مفتوحة لإرسال واستقبال البيانات من / إلى عملية طفل. المعلمة ص + لفتح يفتح خط أنابيب لكل من القراءة والكتابة.

مطلوب الاحمرار بسبب التخزين المؤقت على خطوط الأنابيب، فمن الممكن لتغيير هذا إلى التخزين المؤقت خط باستخدام الأمر fconfigure.

ونقطة واحدة فقط الأخرى؛ النظر في التعليمات البرمجية كنت لا تستخدم المواضيع هنا كنت بدأت عملية طفل. تى سى ال يحتوي على ملحق خيوط التي لا تسمح الاتصالات interthread المناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top