在共享文件中声明和定义结构.
Windows API创建的两个线程CreateThread()都可以看到它的实例:
struct info
{
std::atomic<bool> inUse;
string name;
};
info userStruct; //this guy shared between two threads
Run Code Online (Sandbox Code Playgroud)
线程1连续锁定/解锁以写入结构中的成员(测试的值相同):
while (1)
{
userStruct.inUse = true;
userStruct.name= "TEST";
userStruct.inUse = false;
}
Run Code Online (Sandbox Code Playgroud)
线程2 只是读取和打印,只有它碰巧解锁它
while (1)
{
while (! userStruct.inUse.load() )
{
printf("** %d, %s\n\n", userStruct.inUse.load(), userStruct.name.c_str());
Sleep(500); //slower reading
}
printf("In Use!\n");
}
Run Code Online (Sandbox Code Playgroud)
期待看到很多:
"正在使用!"
如果它进入,每次一次,解锁时:
"0,TEST"
..它确实如此.
但也看到:
" 1,测试"
如果原子布尔为1,我不希望看到它.
我究竟做错了什么?
Windows Embedded Compact 7.
有没有办法从用户空间测试中断延迟时间?
是否有任何工具作为平台构建器的一部分提供?
我还看到了一个名为Intrtime.exe的程序 - 但没有关于如何使用它的示例.
如何测试中断延迟时间?
参考Intrtime.exe,但我该如何实现它?
http://www.ece.ufrgs.br/~cpereira/temporeal_pos/www/WindowsCE2RT.htm
编辑
还发现:
ILTiming.exe实时测量工具(Compact 2013)
Windows Embedded Compact 7.
从USB驱动器运行16KB应用程序.
在main中我有function1()和function2();
Function1()运行并打印出一些信息就好了.
然后程序就死了.
(返回命令提示符(pocket cmd v 7.00).)
Function2在顶部包含一个声明.这是在计算中使用的二维二进制数组,实际上是在当时注释掉的.
function2()
{
LARGE_INTEGER li;
double time[PRIORITY_LEVELS][ITERATIONS]; // 256 X 1000
double difference[ITERATIONS - 1] = {0};
Run Code Online (Sandbox Code Playgroud)
没有意义的部分:
我注释掉2d数组的声明(删除它) - 程序将正确运行function2()的其余内容.
这可能是什么问题,或者我怎么会发现?
我有8GB的RAM.对于256X1000 8字节双倍来说,这应该足够了吧?
任何帮助表示赞赏.
任意长度的3个数字的字符串 - 嵌入在空格和制表符中,下面用\t标记表示:
123456789 \t 12345 \t6789\n
Run Code Online (Sandbox Code Playgroud)
数字之间可以有任何空间和标签的数量和组合.
例如,这也是有效的:
1 \t \t2\t\t\t\t\t \n3\n
Run Code Online (Sandbox Code Playgroud)
提取3个数字的最有效方法是什么?
看看sscanf()但似乎需要字符串的确切格式,这是正确的吗?
谢谢.