私はGTKを初めて知り、それを理解しようとしています。私が今持っていることはGTK、子供の親、共有メモリ、
Widgets *w; // shared mem
struct mystruct *user; // shared mem
....
pid = fork();
.....
if(pid == 0) {
while(1){
get_events(user);
parse_events(user);
// can I write to Widgets *w and the changes happen in the
// parent process that is running the gtkmainloop
write_to_textview("child", w);
}
} else {
......
write_to_textview("parent", w);
gtk_widget_show_all(window);
gtk_main();
}
ユーザーである親、子供と他人の間で共有される構造体です。この構造体は、私は、すぐに彼らは 利用可能だとしてGtkTextViewで親プロセスにプレビューしたいデータが含まれていますどのようにそれを行うかわからない。これは、データが利用可能であるかどうかを確認してからGtkTextViewにデータを書き込みます親
while(1) {
is_available_data(user);
}
にこのようなものを使用することはできません。これは、gtkのメインループのためには不可能です。このシナリオでは、別の方法がなければならないので、ユーザーのイベント(char *)が更新または使用可能になるとすぐに見ることができます(ユーザーはshmとイベントもshmです)。 gtkにループを伝えます。 GtkThreads?
shmを使用して、子プロセス(ウィジェットが親プロセスで実行されている場所)からウィジェットに書き込む簡単な方法はありますか?
私は何をしようとしているよりも簡単な方法があると確信しています。
編集1:
Iは、データが生成さ見ることができます/変更/構造体に子プロセスから添加し、親プロセス(SHM)で問題なくそれを見ます。私がしたいのは、データが変更されると直ちにTextViewを更新することです。確認して更新する必要があるwhileループが必要ですが、gtkmainloopはブロックされているので、これは起こりません。私はアイデアやそれを行う方法が必要です。私は時々、私を助けるためにgtk関連の呼び出しを理解しようとしましたが、できませんでした。
リプレイに感謝します。共有メモリとは、親/子プロセスや他のプロセス(sys/shm.h)からアクセスできるメモリを指すポインタを設定するXSI共有メモリセグメントを使用したことを意味します。はい、データやエフェクトの変更などにアクセスする私の唯一の方法は、スレッドを使用するか、共有メモリレベルでgtk /ウィンドウ/ウィジェットを作成することです。私は糸がこの時点で行くのがより簡単な方法だと信じています。 "あなたをアップアップするつもりでしたが、私の評判は15歳未満です、もう一度ありがとう!" – x11