我需要做以下任务:
1)从sqlite数据库中读取一些数据
2)处理数据
3)用处理过的数据生成一些图表
如果我有一个用户在应用程序中输入了许多数据,那么有一天这个分析可能会变慢并冻结UI.
那么,处理它的正确方法是什么,允许用户与UI交互,可以选择取消操作还是退出屏幕?
我需要为我的所有任务创建简单的线程,并使用取消事件或标志来停止每个任务?或者还有另一种方法吗?
例如:
任务1:在带有标志的线程中从sqlite读取数据,以便在需要时停止进程.
任务2:使用标志处理带有标志的线程中的数据,以便在需要时停止进程.
任务3:将数据传递给第三方组件.此时,它可以取消正在其他组件上运行的操作吗?
我是在思考正确的方法,还是可以改进某些方面?
如果我有一个匿名枚举,是否有任何方法可以将该类型的值传递给函数?例如,
typedef struct {
enum { On, Off } status;
int max_amps;
} SWITCH;
void make_switches(){
SWITCH switch1 = createSwitch( On, 15 );
SWITCH switch2 = createSwitch( Off, 20 );
}
SWITCH* createSwitch( ??? status, int max_amps ){
SWITCH* new_switch = malloc( sizeof( SWITCH ) );
new_switch->status = status;
new_switch->max_amps = max_amps;
return new_switch;
}
Run Code Online (Sandbox Code Playgroud)
我想将匿名枚举的值传递给createSwitch()函数。有什么办法吗?
有没有办法获得指向匿名结构的指针?有了匿名结构,我可以写下面的内容:
struct a{
int z;
};
struct b{
int y;
struct a *x;
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我只struct a在内部使用,struct b并且用它来污染全局命名空间似乎是多余的.有没有办法可以x为匿名结构定义指针().可能如下所示的东西:
struct b{
int y;
struct {
int z;
} *x;
}
Run Code Online (Sandbox Code Playgroud)
或者这本身有效吗?
我想在 clang 中使用 typeof 但不是__typeof__。如果我使用 typeof 而不声明它,我会收到以下警告
vector.c:14:5: warning: extension used [-Wlanguage-extension-token]
vec_init(&a,5);
^
./vector.h:27:26: note: expanded from macro 'vec_init'
((vec_ptr)->data) = (typeof((vec_ptr)->data)) malloc((capacity) * (sizeof((*((vec_ptr)->data))))) \
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
然后我认为定义它可能会解决这个问题,所以我添加了以下代码:
#ifndef typeof
#ifdef __clang__
#define typeof(x) __typeof__(x)
#endif
#endif
Run Code Online (Sandbox Code Playgroud)
添加预处理器定义后,出现以下错误:
In file included from vector.c:1:
./vector.h:5:9: warning: keyword is hidden by macro definition [-Wkeyword-macro]
#define typeof(x) __typeof__(x)
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
但如果我使用__typeof__它,则不会出现错误。如何解决 clang 上的这个警告问题?
有没有办法通过指定类型大小而不是大小本身来定义C++中的变量?或者有没有办法从函数返回一个类型?
template<typename T, int L>
class vector {
public:
T* __vector;
};
#ifdef USE_FLOAT
typedef vector<float, 3> vec3
#else
typedef vector<double, 3> vec3;
#endif
void myFunc(vec3) {
float a = vec3.__vector[0];
// AAHHH but what if vec3 is a vector of doubles?
// I can get the size of the type by
int s = sizeof(vec3[0]);
// So can I declare a variable by just giving the size of the variable?
}
Run Code Online (Sandbox Code Playgroud)
或者,无论如何在类中都有一个可以返回模板类型名称的访问器函数?
任何的意见都将会有帮助.我知道还有其他方法可以解决这个问题,但我特别想知道这两件事中是否有可能.(我对第二种方法的希望不大.)
我认为第一种方法是可以通过使用void指针和malloc'ing ...但我宁愿避免使用堆,只要坚持堆栈,如果可能的话.
编辑:
只是为了澄清,我不认为 …