Solved

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

Posted on 2012-04-02
7
420 Views
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?

-Thanks
0
Comment
Question by:atomicgs12
  • 3
  • 2
  • 2
7 Comments
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
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 ?
0
 

Author Comment

by:atomicgs12
Comment Utility
no globals defined as static more like: #define SKIP_THIS_CODE 1
0
 
LVL 53

Expert Comment

by:Infinity08
Comment Utility
As I said - that was a guess. I can't do anything more than guess, unless you provide actual code.
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 32

Accepted Solution

by:
sarabande earned 500 total points
Comment Utility
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.

Sara
0
 

Author Comment

by:atomicgs12
Comment Utility
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:

#ifdef SKIP_THIS_CODE
     the code I want to run
#else
     unwanted code
#endif

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

Thanks
0
 

Author Closing Comment

by:atomicgs12
Comment Utility
Found a slight programming error on my part but your suggestion did point me in the correct direction to get it working. Thanks
0
 
LVL 32

Expert Comment

by:sarabande
Comment Utility
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 .

Sara
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

772 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now