|
Thanks for the info; I have run Procmon.exe , and filtered it to watching only EXPLORER.exe ; and after wading through reams of event log and trying various options with the filters I get the impression that the information about what information columns are shown for which folder, is not stored in the registry but in some private area that only Explorer.exe knows where it is, or is stored in the register encrypted.
E.g. with Procmon.exe running, filtered to catch all explorer.exe operations, I went into Explorer and reset the display options for a file folder called "harness". But the word "harness" never appeared in the resulting procmon.exe log, even though in procmon.exe's display I displayed all columns.
modified 21-Mar-13 17:19pm.
|
|
|
|
|
Anthony Appleyard wrote: I have run Procmon.exe , and filtered it to watching only EXPLORER.exe ; and after wading through reams of event log... Did you filter the operation to just watch RegSetValue?
Anthony Appleyard wrote: ...or is stored in the register encrypted. It's probably the ColInfo value, which is a REG_BINARY type.
Anthony Appleyard wrote: ...I went into Explorer and reset the display options for a file folder called "harness". But the word "harness" never appeared in the resulting procmon.exe log... I think the folders are referred to using numbers instead.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Is RAII used mainly where the code uses exceptions, or does it apply where you check for errors by looking at return values?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Exceptions and RAII complement each other nicely, but RAII is useful any time you want to acquire a resource and not have to worry about explicitly cleaning it up.
Steve
|
|
|
|
|
In theory you can think of an exception as if it was a "big return" from many functions to the catch part of the nearest try block in your callstack. Both in case of a an exception and a normal return you want to release resources that are on the stack frame of the returning function(s). This is where RAII is very useful, by applying it your code will be more brief/visually pleasing, and it is usually much more invulnerable by later changes. Lets say you find a bug and fix it with an error message and a return - but what happens if you forget to free already allocated resources... With RAII this is usually not a problem.
Again, using exceptions and returning values are two very similar ways to report results (not only errors!!!) to the caller. Its a fact that exceptions are used mostly for error handling, I think this is because error-free execution usually doesn't require "multiple returns". Some examples on exceptions whos purpose is not "error reporting" to the caller: Abort exception in Delphi: a silent exception to escape to the nearest catch block, it's silent because it doesn't log errors or show error message boxes even if you don't catch it. Its an easy way for example to escape from the whole "button press" event handler no matter how deep is the callstack. Anoter example is the SystemExit exception of python. If you call sys.exit(0) it doesn't terminate the interpreter!!! Instead it thorws a SystemExit exception that isnt necessarily an error (especially when you exit with zero).
|
|
|
|
|
Exceptions are generally pretty expensive, much more so than a subroutine return. They are are intended for use in exceptional situations. If you're generating lots if them you're probably misusing them.
Steve
|
|
|
|
|
In our current environment performance is pretty important so we compile our C++ code with exceptions turned off and the coding convention is totally avoiding the use of exceptions. Some say that compiling the code with exception handling can be -5 to -10% in performance depending on the compiler because of the boilerplate code generated. I think -5 to -10% is not so big waste in programs where performance is not extremely critical and in return you get a much cleaner code with exception handling because you don't have to return with some kind of error indicator value and you don't have to check this value after every function call. Unfortunately the use of exceptions in C++ is indeed not as pretty as in some other languages like C# and Java, it has some pitfalls so you have to make your choice whether to use them or not. I found a really nice discussion about this: C++ Exceptions: Pros and Cons[^]
|
|
|
|
|
It's true that stack based exception handling has an overhead even when exceptions are not raised (this isn't true for table based exceptions). That said I was referring to the cost when they are raised too frequently, in particular for non-exceptional cases such as returning values.
Steve
|
|
|
|
|
I suspect most if not all c++ compilers use the table based version, but unfortunately it still has an overhead. Not big, but more than zero. For most C++ programs that is not an issue.
|
|
|
|
|
I was partly wrong in my previous post because I misunderstood "table driven". There is an x86 and an x64 version of the table driven exception handling, the x64 version is working like you said. What I meant is the x86 version that was SEH + tables. We are still on x86.
|
|
|
|
|
Hi all,
For my current project[^] I need to use a function pointer to allow a QueueHandler to execute the task of a QueueObject.
I know about what a function pointer is, no worries I searched the net[^] a bit.
I got one question:
-- Is there a possibility to point towards a function without knowing what it exactly returns, and more important without any knowledge of the count and type of the parameters?
In the end it should be like the delegate I know from the .NET side of multithreading.
Thanks for all suggestions in advance.
[Edit: To the univoter who stroke down this question:
Either explain why you have down-voted or go and die in a f*cking fire you moronic ********]
modified 21-Mar-13 11:55am.
|
|
|
|
|
I don't think you can do this in C/C++. How would you pass the correct parameters if you don't know the type and count, and how would you handle whatever it returns? I guess the only possible way round it would be to send a void* to some memory area containing the required parameters, or use the void func(...) type definition. But you still need to know the input and output types in the code that calls the function.
Use the best guess
|
|
|
|
|
Thank you for your reply.
Another idea which came to my mind: Can I use a array of pointers of an unknown type as arguments for the function?
In this case I'd be able to force the user of the tool to just give this array as a parameter.
This approach would look like
int (*DoTaks)(void[]);
Please correct me if I am wrong.
|
|
|
|
|
Marco Bertschi wrote: Can I use a array of pointers of an unknown type as arguments for the function?
I would say, yes, you can do that, but it's dangerous because it's not type-safe. This type of code would be filled with casts and could be very difficult to get right.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Thank you for your answer, I understand the problem.
Is there any other way to get something like a delegate in native C++?
|
|
|
|
|
Even for a managed delegate you need to define the paramter types and return type. I would suggest defining a class or struct containing all the parameters you need to pass and additionally a kind of type that tells the receiving function which members it needs to use. Then you pass just that struct as parameter.
|
|
|
|
|
Freak30 wrote: I would suggest defining a class or struct containing all the parameters you need to pass
There does the problem start. I don't know which parameters are needed because I do not define the method which is executed. It is needed as a part of this project[^] (as I have mentioned in the OP).
Thank you for your help anyways.
|
|
|
|
|
After viewing your link, i couldn't help but wonder if a deque would be better. (aka work stealing - google Cilk)
All tasks take work from the front of its own queue, but an idle task takes work (steals) from another by removing items from the back of its queue.
"It's true that hard work never killed anyone. But I figure, why take the chance." - Ronald Reagan
That's what machines are for.
Got a problem?
Sleep on it.
|
|
|
|
|
Yes you could do that (you need int (*DoTaks)(void*); notation), but you still have the problem that any mistakes with the parameters cannot be spotted by the compiler. If you are happy to live with that risk then go ahead; a small prototype should help to clarify the issues you may face. Something like:
struct aStruct
{
int value;
char someText[12];
};
int func1(int pvParameters[3])
{
return 1;
}
int func2(aStruct* paStruct)
{
return 2;
}
void DoTest()
{
int myArray[] = { 1, 2, 3 };
aStruct myStruct = { 5, "data" };
int (*DoFunc)(void*);
DoFunc = (int (*)(void*))func1;
int r = DoFunc((void*)myArray);
DoFunc = (int (*)(void*))func2;
int r2 = DoFunc((void*)&myStruct);
}
Use the best guess
|
|
|
|
|
i would like to ask a question regarding to the subject above ,the question is like this "There is an array of String type named arrFruits with the following values: pear, banana,
apple, cherry, watermelon, papaya. Sort the contents using an appropriate sort routine and
display the sorted data from the same array."
& "Randomly enters 10 alphabets into arr_A. Then allow the user to enter a value into a
variable. The value of the variable is then compared with the values in arr_A. If there is a
match, the program will display the subscript of the cell containing the target value. If
more than one of the cells contains the target value, then the function should return all the
subscripts that has the identical values with the variable." if someone could help me solve my problem i would very appreciate your help thank you. // please add remark to the code thank you
|
|
|
|
|
Sorry, but no one is going to do your homework for you. Try writing your array items out on a pice of paper and think how you would sort them in order, how you would find one beginning with a specific letter etc.
Use the best guess
|
|
|
|
|
I try to do some of the code for this question but didn't success, can u help me solve it? here is the question together with the answer I done.
Task 3 (Question)
Using two arrays, named arr_A and arr_B respectively, write a function named
concantenate that join the values from arr_A to the values from arr_B according to their
sequence and stores the concatenated values in arr_C. Display the contents of arr_A,
arr_B and arr_C. The three arrays are declared as integer type
My Answer
#include <iostream>
using namespace std;
void concantenate(int arr_A, int arr_B, int total)
{
int arr_C;
for (int n=0; n
|
|
|
|
|
I think you should go back to your notes and re-read the section on variables and arrays. You could also read some of the MSDN documentation[^].
Use the best guess
|
|
|
|
|
Please read the "How to ask a question"-Guide. We do not solve homework, neither do we give away code when we are asked to.
|
|
|
|
|
Hello All,
I am usnng SOCK_DGRAM and getting error 10035 in recvfrom(). Any help....
|
|
|
|