|
Here the code of a "pulsar" in Qt context. QMTPulsar is an abstract class used for execution of periodic switches, and execute a function at the end of each period. The compilation message is given.
Best regards.
> QMThreadOneAction is used to run asynchronously a function;
La création des QMThreadOneAction est incorrecte.
//-------------------------------------
/** QMTPulsar.h
> Pulse component
- mechanism of periodic (or not) raise and fall call
*/
#ifndef __TESTUTILS_H__
#define __TESTUTILS_H__
#ifdef DEVICELOADER_EXPORTS
#define DEVICELOADER_API __declspec(dllexport)
#else
#define DEVICELOADER_API __declspec(dllimport)
#endif
#include "QtCore/QtGlobal"
#include "QtCore/QThread"
#include "MTDevicePrv.h"
//-------------------------------------
/** QMTPulsar
> process up and down switches, and function execution at each switch.
*/
class DEVICELOADER_API QMTPulsar :
public QThread
{
//-------------------------------------
/** QMThreadOneAction
> execute asynchronously a function
*/
class QMThreadOneAction :
public QThread
{
private:
MTDevicePrv *_device;
void (__cdecl* QMTPulsar::_fonc)(MTDevicePrv *dev);
bool _running;
//! execute function once
void run(void)
{
if (_fonc) {
if (!_running) {
_running = true;
try {
_fonc( _device);
}
catch(...){}
_running = false;
}
}
}
public:
//! constructeur
QMThreadOneAction (
MTDevicePrv *dev,
void (__cdecl* QMTPulsar::fonc)(MTDevicePrv *)
)
{
_running = false;
_device = dev;
_fonc = fonc;
}
//! execute asynchronously function
void go( void) {
run();
}
};
private:
MTDevicePrv *_device;
//! start with action or not
/**
_startWithAction = false
F1 F2
_______________
D1 | D2 |
__________
_startWithAction = true
F1 D1 F2
_______________
| | D2
__________
*/
bool _startWithAction;
//! D1 (microsecond)
qint64 _firstDurationMUS;
//! D2 (microsecond)
qint64 _secondDurationMUS;
//! repeat mechanism
bool _periodic;
//! is operating
bool _active;
QMThreadOneAction *_thFirst;
QMThreadOneAction *_thSecond;
//! processing
void run() {
do {
if (!_active) {
QThread::yieldCurrentThread();
}
else {
if (!_startWithAction) {
QThread::usleep( _firstDurationMUS);
_firstAction();
QThread::usleep( _secondDurationMUS);
_secondAction();
}
else {
_firstAction();
QThread::usleep( _firstDurationMUS);
_secondAction();
QThread::usleep( _secondDurationMUS);
}
}
} while( _periodic);
};
//! first action call to implement
void _firstAction( void) {
_thFirst->go();
}
//! second action call to implement
virtual void _secondAction( void) {
_thSecond->go();
}
public:
//! first action call to implement
virtual void fnFirstAction( MTDevicePrv *dev) = 0;
//! second action call to implement
virtual void fnSecondAction( MTDevicePrv *dev) = 0;
/** create pulsar
@param startWithAction start immediately firstAction or not
@param firstDurationMUS first delay in micro sec
@param secondDurationMUS second delay in micro sec
@param periodic periodic or not
@param startActive start activity immediately
*/
QMTPulsar(
MTDevicePrv *dev,
bool startWithAction,
qint64 firstDurationMUS,
qint64 secondDurationMUS,
bool periodic,
bool startActive)
{
_device = dev;
_startWithAction = startWithAction;
_periodic = periodic;
_firstDurationMUS = firstDurationMUS;
_secondDurationMUS = secondDurationMUS;
_active = startActive;
/* error #171)*/ _thFirst = new QMThreadOneAction( _device, fnFirstAction);
/* error #172)*/ _thSecond = new QMThreadOneAction( _device, fnSecondAction);
/*
Compilation en cours...
QMTPulsar.cpp
c:\_projets-cpp2008\deviceframework\deviceframework\devicemanager\qmtpulsar.h(171) : error C3867: &'QMTPulsar::fnFirstAction' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'QMTPulsar::fnFirstAction' pour créer un pointeur vers membre
c:\_projets-cpp2008\deviceframework\deviceframework\devicemanager\qmtpulsar.h(172) : error C3867: &'QMTPulsar::fnSecondAction' : liste d'arguments manquante dans l'appel de fonction ; utilisez 'QMTPulsar::fnSecondAction' pour créer un pointeur vers membre
Le journal de génération a été enregistré à l'emplacement "file://c:\_Projets-CPP2008\DeviceFramework\DeviceFramework\DeviceManager\src\Debug\BuildLog.htm"
DeviceManager - 2 erreur(s), 0 avertissement(s)
*/
run();
};
~QMTPulsar();
//! return owner device
MTDevice* getDevice() const {
return _device ;
}
//! activate (if true) mechanism
virtual void activate(
bool active) {
_active = active;
if (!QThread::isRunning())
run();
};
};
#endif
|
|
|
|
|
I think you are talking about a callback function?
See here[^]
|
|
|
|
|
Hello,
not exactly (see the first sample, and the principle here :
class ClassACTION {
class ClassExecute {
private:
//pointer on function
void (*_func)( string s);
public:
ClassExecute( void (* func)( string s) { _func = func; }
void go() { _func( "hello"); }
}
private:
ClassExecute *_Executor;
public:
void myFunction( string s) { cout << s << " friend." << endl; }
ClassACTION() {
_Executor = new ClassExecute( myFunction); <<< here is the problem (does'nt compile)...
_Executor->go();
}
};
Best regards.
|
|
|
|
|
You need to use &class-name::fnFirstAction and &class-name::fnSecondAction , where class-name is the class that implements those methods.
You don't appear to have any implementation of the methods, though - the only definitions of those two methods that I can see is the abstract method declarations in QMTPulsar - i.e. the following two lines:
virtual void fnFirstAction( MTDevicePrv *dev) = 0;
virtual void fnSecondAction( MTDevicePrv *dev) = 0;
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hello,
I have a STL map and string values as the key values However recently, i want to search this map as it is like auto-complete ComboBox.
For example,I have keys in the map as such Apple, Pearl, Orange.
When i enter 'A' i want to return Apple from the map.
I know that i can iterate thorough each map object and compare its key, but i think that would inefficient.
Any ideas ?
Bekir.
|
|
|
|
|
Use std::map::lower_bound . For example, the program below gives you a pair of iterators defining the range containing keys starting with 'A':
#include <string>
#include <map>
#include <iostream>
int main(int, char**)
{
std::map<std::string, int> a;
a.insert(std::make_pair("Apple", 1));
a.insert(std::make_pair("Banana", 1));
a.insert(std::make_pair("Pear", 1));
a.insert(std::make_pair("Apricot", 1));
a.insert(std::make_pair("Plum", 1));
std::map<std::string, int>::const_iterator low = a.lower_bound("A");
std::map<std::string, int>::const_iterator hi = a.lower_bound("B");
for(std::map<std::string, int>::const_iterator it=low;it!=hi;++it)
{
std::cout << it->first << std::endl;
}
}
Note that the sample key for the second lower_bound call is just the key you're looking for with the last character incremented by one.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Thank you, this is what i was looking for
Bekir.
|
|
|
|
|
Doesn't this require the elements to be sorted?
|
|
|
|
|
It's a std::map - by definition, it's sorted.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
You are right. maps do it.
|
|
|
|
|
i need from vc++ program get a list of dll (there are in one folder, "plugins"), from choosen dll get a list functions and run them. it's deficult? write some code to do it
modified on Wednesday, April 8, 2009 3:04 AM
|
|
|
|
|
In general, I'd look for a known set of functions, rather than trying to get a list of functions in the DLL - after all, you need to know how to call the functions, if they're plug-ins?
So - the first task is to design your plug-in interface so it's generic enough to do what you want.
Once you've done that, it's relatively easy to iterate through the files in a directory (look at the FindFirstFile[^] documentation), see if they're DLLs (LoadLibrary[^]) and see if they have the function you want (GetProcAddress[^]).
Now, if you really want to list the functions exported by a DLL, you need to read the internal structure[^] of a DLL, to get its export table. There's a short program to illustrate that here[^] - look for the last post on the page.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
|
No you are wrong. It's called "CodeProject".
|
|
|
|
|
XDDDD good one
Regards.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
Rating helpfull answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
No. You are an absolute idiot if you think anybody here is going to give up their time in order to do your project for free. If you want the project, then pay for it. On another website. Stop posting ridiculous queries which drown out the legitimate, intelligent questions which have been posted
|
|
|
|
|
hai i need a complete code for our project .. interactive voice response system using vc++(MFC) .. please help me
|
|
|
|
|
Sure, would you like some tea with it ?
|
|
|
|
|
OK, seriously though: Read the guidelines and edit your post to have more information and make sure your query is specific, at least to some degree.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
Hello All ,
My following Code is in cpp and use COM interfaces, My complile and build with 0 errors and 0 warnings .But at run it gives exception .In code line
hr=serviceManager->AddScanPackageService(BSTR("Offline SyncService"),BSTR("c:\\wsusscan.cab"),0,&service);
when this line exicute value of hr is E_INVALIDARG.
plz help my code is as folloing .
/////////////////////////////////////////////////////////////////////
{
IUpdateSession * session = 0;
IUpdateServiceManager * serviceManager = 0;
IUpdateService * service = 0;
IUpdateSearcher * searcher = 0;
ISearchResult * searchResult = 0;
IUpdateCollection *collection=0;
IUpdate *update=0;
HRESULT hr;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_UpdateServiceManager, 0, CLSCTX_ALL,
IID_IUpdateServiceManager,(LPVOID *)&serviceManager);
hr=CoCreateInstance(CLSID_UpdateSession,0,CLSCTX_ALL,IID_IUpdateSession,
(LPVOID *)&session);
////////////////////////////////////////////
hr=serviceManager->AddScanPackageService(BSTR("Offline Sync Service"),BSTR("c:\\wsusscan.cab"),0,&service);
//////////////////////////////////////////////////////////
hr=session->CreateUpdateSearcher(&searcher);
ServerSelection ss={ ssOthers } ;
BSTR str=0;
hr=searcher->put_ServerSelection(ss);
hr=service->get_ServiceID(&str);
hr=searcher->put_ServiceID(str);
hr=searcher->Search(L"IsInstalled=0",&searchResult );
hr=searchResult->get_Updates(&collection);
LONG count;
hr=collection->get_Count(&count);
for(LONG i=0;i<count;i++)
{
collection->get_Item(i,&update);
update->get_Title(&str);
printf("%s",(char *)str);
}
}
///////////////////////////////////////////////////////////////////////
Thanks for reading this
question/ replying answer.
|
|
|
|
|
I suspect your problem is that you can't just create BSTR s by casting normal strings to BSTR .
You need to a) use SysAllocString[^] to create the BSTR, b) convert the string from ASCII to OLE format (personally, I'd use the ATL conversion functions[^] as they're dead easy to use) and c) use SysFreeString[^] to release the string once you've finished with it.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
|
Hi,
I need to design an application accessing database system.
I need to design it like a server/mutiple client model in c++.
Can i get any article dealing with the database client/server model.
Thanks
|
|
|
|
|
krishnan.s wrote: Can i get any article dealing with the database client/server model.
Here's one[^].
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
hi all,
I had to include dll with my exe, but my problem is if i keep those dll in my install folder than my project does not work fine. To remove this i have put those dll in new folder inside my installed folder but now my project is not loading those dlls and showing warning
warning LNK4199: /DELAYLOAD:...\test_Folder\abc.dll ignored; no imports found from ...\test_Folder\abc.dll
|
|
|
|
|