Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Visual C++ why does seperate thread not regonize globals/defines.

Posted on 2012-04-02
Medium Priority
Last Modified: 2012-04-02
I have an application written in C++ using Visual C++ 2009. In this application I have a seperate 'watcher' thread that listens for messages targeted for this seperate thread. In my application I have a header file that let's call common.h. In this common.h file I have defined some globals and #defines that I want the thread to reconize. But when I run the application and put a break point inside of the seperate thread the globals or defines are not set to a value that I inialized them to. Will a seperate thread, even though in the same application, not reconize globals/defines, from an included file?

Question by:atomicgs12
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
LVL 53

Expert Comment

ID: 37797123
You currently haven't given enough information to answer your question. You'll have to provides some specific code.

One guess : are your globals defined as static ?

Author Comment

ID: 37797190
no globals defined as static more like: #define SKIP_THIS_CODE 1
LVL 53

Expert Comment

ID: 37797215
As I said - that was a guess. I can't do anything more than guess, unless you provide actual code.

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

LVL 35

Accepted Solution

sarabande earned 2000 total points
ID: 37797419
if you need shared göobal variables you normally would use the volatile keyword in order to prevent the compiler from optimizing access.

if the thread code is in different cpp file than the code which sets the initial values to the shared variables, you may define the variable only in one (main) cpp and use extern keyword in other (thread) cpp file(s). otherwise the main thread and the worker thread would use their own instance of the variable but would not share.

an alternative to global variables is to use static class members.


Author Comment

ID: 37797554
The thread code is in the same cpp file. The #define is in an .h file that is included at the beginning of the cpp file, i.e. #include "Common.h". In Common.h the define is defined as
' #define SKIP_THIS_CODE 1'. SKIP_THIS_CODE is used in the watcher thread as:

     the code I want to run
     unwanted code

in the case above the 'unwanted code' is always run. Can I NOT use the #define SKIP_THIS_CODE in the thread?


Author Closing Comment

ID: 37797609
Found a slight programming error on my part but your suggestion did point me in the correct direction to get it working. Thanks
LVL 35

Expert Comment

ID: 37799539
the #ifdef preprocessor means is an abbreviation of #if defined. that means regardless whether you define the macro as 1 or 0 it would be defined, means the condition is true, granted that the include statement of the header file where it is defined is above the #ifdef. the only way to make that reverse is to use #undef .


Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
  Included as part of the C++ Standard Template Library (STL) is a collection of generic containers. Each of these containers serves a different purpose and has different pros and cons. It is often difficult to decide which container to use and …
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
Suggested Courses

721 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question