Ethereal-dev: [Ethereal-dev] USE_THREADS on Win32
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Gisle Vanem" <giva@xxxxxxxxx>
Date: Thu, 24 Jun 2004 15:14:10 +0200
Seems my message of yesterday got sent to /dev/null. So here's a repost. As of GLib/GTK 2.4 (I think it was) using threads seems to work fine. I've built Pan, the news-reader with this. The ethereal UI update works smoother with update_thread() than with the update_cb() timer callback (3 sec is a long time!). So Windows should also have the option to call g_thread_init() if USE_THREADS is defined. Also, in webbrowser.c I've included <shellapi.h> directly since it isn't included if WIN32_LEAN_AND_MEAN is defined (a lot fast to built with this on). --gv
--- ethereal-2004-06-23/gtk/main.c Mon Jun 21 18:45:07 2004
+++ gtk/main.c Wed Jun 23 16:40:24 2004
@@ -146,6 +146,18 @@
#define DEF_READY_MESSAGE " Ready to load file"
#endif
+#if defined(USE_THREADS)
+# ifdef WIN32 && (GTK_MAJOR_VERSION < 2 || (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION < 4)
+ /* Win32 requires GTK 2.4.x for UI update */
+# undef USE_THREADS /* Maybe an "#error"? */
+# elif (GTK_MAJOR_VERSION < 2)
+ /* Others requires GTK 2.x for UI update */
+# undef USE_THREADS
+# endif
+#elif !defined(G_THREADS_ENABLED)
+# undef USE_THREADS
+#endif
+
capture_file cfile;
GtkWidget *main_display_filter_widget=NULL;
GtkWidget *top_level = NULL, *tree_view, *byte_nb_ptr, *tv_scrollw;
@@ -1126,7 +1138,7 @@
}
#endif
-#if defined WIN32 || GTK_MAJOR_VERSION < 2 || ! defined USE_THREADS
+#if !defined USE_THREADS
/*
Once every 3 seconds we get a callback here which we use to update
the tap extensions. Since Gtk1 is single threaded we dont have to
@@ -1148,7 +1160,7 @@
gtk1-ethereal and it will just work.
*/
static GStaticMutex update_thread_mutex = G_STATIC_MUTEX_INIT;
-gpointer
+static gpointer
update_thread(gpointer data _U_)
{
while(1){
@@ -1170,17 +1182,19 @@
return NULL;
}
#endif
+
void
protect_thread_critical_region(void)
{
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
+#ifdef USE_THREADS
g_static_mutex_lock(&update_thread_mutex);
#endif
}
+
void
unprotect_thread_critical_region(void)
{
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined USE_THREADS
+#ifdef USE_THREADS
g_static_mutex_unlock(&update_thread_mutex);
#endif
}
@@ -1655,8 +1669,7 @@
exit(0);
}
- /* multithread support currently doesn't seem to work in win32 gtk2.0.6 */
-#if ! defined WIN32 && GTK_MAJOR_VERSION >= 2 && defined G_THREADS_ENABLED && defined USE_THREADS
+#ifdef USE_THREADS
{
GThread *ut;
g_thread_init(NULL);
@@ -1664,10 +1677,10 @@
ut=g_thread_create(update_thread, NULL, FALSE, NULL);
g_thread_set_priority(ut, G_THREAD_PRIORITY_LOW);
}
-#else /* WIN32 || GTK1.2 || !G_THREADS_ENABLED || !USE_THREADS */
+#else /* !USE_THREADS */
/* this is to keep tap extensions updating once every 3 seconds */
gtk_timeout_add(3000, (GtkFunction)update_cb,(gpointer)NULL);
-#endif /* !WIN32 && GTK2 && G_THREADS_ENABLED */
+#endif /* USE_THREADS */
#if HAVE_GNU_ADNS
gtk_timeout_add(750, (GtkFunction) host_name_lookup_process, NULL);
--- ethereal-2004-06-23/gtk/webbrowser.c Wed Jun 23 03:38:39 2004
+++ gtk/webbrowser.c Wed Jun 23 15:37:45 2004
@@ -39,6 +39,7 @@
#if defined(G_OS_WIN32)
/* Win32 - use Windows shell services to start a browser */
#include <windows.h>
+#include <shellapi.h>
#elif defined (HAVE_OS_X_FRAMEWORKS)
/* Mac OS X - use Launch Services to start a browser */
#include <CoreFoundation/CFBase.h>
- Prev by Date: RE: [Ethereal-dev] how to read the pdml file?Is there some interface toread it?
- Next by Date: [Ethereal-dev] Testing dissectors with random data
- Previous by thread: [Ethereal-dev] how to produce the pdml file directly when running capture?
- Next by thread: [Ethereal-dev] Testing dissectors with random data
- Index(es):





